我想在调用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_method
方法中添加acts_as
,返回未定义的方法。有什么想法吗?
答案 0 :(得分: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