ActiveSupport ::关注代码放置在包含的块内或模块体中

时间:2017-03-14 14:14:38

标签: ruby-on-rails ruby ruby-on-rails-5 activesupport-concern

假设我有一个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 Magicincluded区块之外或之内的差异

1 个答案:

答案 0 :(得分:0)

当关注点包含在类中时,includeclass_methods允许接收类继承这些方法。

included添加了实例方法,而class_methods添加了类方法。

来源:Rails Concerns Docs

另一方面,如果您的问题是include Magic的位置之间的差异,那么该课程的运作方式就没有差异。