【问题标题】:ActiveSupport::Concern code placed inside the included block or in the module bodyActiveSupport::Concern 代码放置在包含的块或模块主体中
【发布时间】:2017-03-14 14:14:38
【问题描述】:

假设我有以下命名空间,其中包含一个 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 块之外或内部的区别)

【问题讨论】:

  • 我不理解否决票,这是一个有效的问题。

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


【解决方案1】:

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

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

来源:Rails Concerns Docs

另一方面,如果您的问题是 include Magic 的位置之间的差异,那么类的功能没有差异。

【讨论】:

  • 是的,我的问题是关于 ìnclude Magicincluded 块外部或内部的问题
猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 2012-01-30
  • 2011-09-05
  • 2012-10-18
  • 2018-10-07
  • 2012-06-01
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多