假设我有以下命名空间,带有 Base
定义了一些可以重用的方法的模块
module MyNameSpace
module Magic
extend ActiveSupport::Concern
class_methods do
def magic_field(field_name)
# Defines methods and attributes based on field name
end
end
end
end
之间有什么区别(如果有的话)
module MyNameSpace
module Foo
extend ActiveSupport::Concern
include Magic
included do
magic_field(:foo)
end
end
end
和
module MyNameSpace
module Foo
extend ActiveSupport::Concern
included do
include Magic
magic_field(:foo)
end
end
end
(问题是关于
include Magic
是在 included
块的外部还是内部的区别)
最佳答案
当关注点包含在一个类中时,include
和 class_methods
允许接收类继承这些方法。included
添加实例方法,而 class_methods
添加类方法。
来源:Rails Concerns Docs
另一方面,如果您的问题是 include Magic
的位置之间的差异,该类的运行方式没有区别。
关于ruby-on-rails - ActiveSupport::Concern 代码放置在包含的 block 或模块主体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788376/