0

ActiveRecord::Base.subclassesすべての ActiveRecord::Base サブクラスにスコープを追加しようとしていますが、またはを呼び出してリストする前にクラスに触れる必要があるため、私のアプローチは機能しませんActiveRecord::Base.descendants。そのため、スコープを含む ActiveSupport::Concern 拡張クラスを含めて、ループ内のクラスを拡張することはできません。

またDir.glob(Rails.root.join("app/models*.rb").to_s)、すべてのファイルをリストして要求することもできません。nil環境が読み込まれるまでRails.root が返されるためです。

では、すべての ActiveRecord::Base サブクラスを gem のスコープで拡張するにはどうすればよいでしょうか?

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 に答える