为自定义 acts_as 添加 class 方法
Add class methods for custom acts_as
我想在调用 acts_as
方法时动态添加 class 方法。我的文件结构如下所示(取自 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
我希望能够在 class 调用 acts_as_foo
时 仅 声明 class 方法。实例方法适用于 LocalInstanceMethods
。最简单的方法是添加到模块中,但我所有其他 classes 也有这种方法。我已经尝试将 define_method
添加到 acts_as
方法,returns 未定义方法。有什么想法吗?
我认为您只需要创建第二个子模块并使用 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
我想在调用 acts_as
方法时动态添加 class 方法。我的文件结构如下所示(取自 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
我希望能够在 class 调用 acts_as_foo
时 仅 声明 class 方法。实例方法适用于 LocalInstanceMethods
。最简单的方法是添加到模块中,但我所有其他 classes 也有这种方法。我已经尝试将 define_method
添加到 acts_as
方法,returns 未定义方法。有什么想法吗?
我认为您只需要创建第二个子模块并使用 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