Ar の find メソッドをオーバーライドするライブラリ コードがあります。MyModel.find と @parent.my_models.find の両方が機能し、正しいスコープが適用されるように、すべての Association クラスのモジュールも含めます。
私のコードは will_paginate のものに基づいています:
a = ActiveRecord::Associations
returning([ a::AssociationCollection ]) { |classes|
# detect http://dev.rubyonrails.org/changeset/9230
unless a::HasManyThroughAssociation.superclass == a::HasManyAssociation
classes << a::HasManyThroughAssociation
end
}.each do |klass|
klass.send :include, Finder::ClassMethods
klass.class_eval { alias_method_chain :method_missing, :paginate }
end
私の問題は、一部のモデルのファインダーのみをオーバーライドしたいということです。現在、すべてのモデルで共有されているすべての関連コレクション クラスを拡張する必要があります。モジュールを渡すことで、モデルごとに関連付けを拡張できることはわかっています。
has_many :things, :extend => SomeCustomMethods
しかし、私のライブラリは基本的に ActiveRecord プラグインなので、アプリケーション内のすべてのモデルに影響を与えることなく、モデルとスコープ コレクションの両方に適用される、プラグ可能なファインダー拡張機能の明確な規則が必要です。