0

我试图为所有 ActiveRecord::Base 子类添加范围,但我的方法不起作用,因为在通过调用ActiveRecord::Base.subclasses或列出类之前需要先触及这些类ActiveRecord::Base.descendants。因此,我无法通过包含包含范围的 ActiveSupport::Concern 扩展类来扩展循环中的类。

我也不能Dir.glob(Rails.root.join("app/models*.rb").to_s)用来列出和要求所有文件。因为 Rails.root 会nil在环境加载之前返回。

那么如何使用我的范围从 gem 扩展所有 ActiveRecord::Base 子类?

4

1 回答 1

1

准确地添加到所有子类:

class ActiveRecord::Base
  def self.inherited(child)
    child.instance_eval <<-EOV
      scope ...
    EOV
    super
  end
end

添加到 ActiveRecord::Base

module MyScope
  extend ActiveSupport::Concern
  included do
    scope ...
  end
end

# Load it before_initialize:

class Railtie < ::Rails::Railtie
  config.before_initialize do
    ActiveSupport.on_load :active_record do
      include MyScope
    end
  end
end
于 2013-02-21T11:21:23.767 回答