ruby-on-rails - ActiveSupport::Concern 代码放置在包含的 block 或模块主体中

标签 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 Magic 是在 included 块的外部还是内部的区别)

最佳答案

当关注点包含在一个类中时,includeclass_methods允许接收类继承这些方法。
included添加实例方法,而 class_methods添加类方法。

来源:Rails Concerns Docs

另一方面,如果您的问题是 include Magic 的位置之间的差异,该类的运行方式没有区别。

关于ruby-on-rails - ActiveSupport::Concern 代码放置在包含的 block 或模块主体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788376/

相关文章:

ruby-on-rails-5 - acts_as_follower gem 在 rails5 中不起作用

ruby-on-rails - 从 Rails 5 模型访问 jsonb 列和属性

sql - 如何在 Rails 控制台中查询表

mysql - 如何在dockerized Rails应用程序中创建Mysql测试数据库?

ruby - 我应该对小型单一服务服务器采取安全措施吗?

ruby-on-rails - ruby on Rails - s3_direct_upload 没有反应

ruby-on-rails - 如何从Rails 5日志的SQL部分过滤敏感参数?

ruby-on-rails - rails : NameError: uninitialized constant

ruby-on-rails - 无法在 Ubuntu 上通过 Unicorn 重新启动找到 libmagickwand-dev 包

ruby-on-rails - 将外键添加到 Rails 模型