0

我想在方法调用时动态添加类方法acts_as。我的文件结构如下所示(取自http://guides.rubyonrails.org/plugins.html):

module ActsAsFoo
  extend ActiveSupport::Concern

  included do
  end

  module ClassMethods
    def acts_as_foo(options = {})
      include ActsAsFoo::LocalInstanceMethods
    end
  end

  module LocalInstanceMethods
    def instance_method
      # This method works without any issue
    end
  end
end

class Bar
  acts_as_foo
end

我希望能够在类调用时声明类方法acts_as_foo。实例方法适用于LocalInstanceMethods. 最简单的方法是添加到模块中,但我所有的其他类也有这个方法。我已经尝试添加一个define_methodintoacts_as方法,返回未定义的方法。任何想法 ?

4

1 回答 1

2

我认为您只需要创建第二个子模块并使用extend而不是include

module ActsAsFoo
  extend ActiveSupport::Concern

  included do
  end

  module ClassMethods
    def acts_as_foo(options = {})
      extend ActsAsFoo::LocalClassMethods
    end
  end

  module LocalClassMethods
    def class_method
      # class method definition
    end
  end
end

class Bar
  acts_as_foo
end
于 2015-04-16T09:03:46.233 回答