¿Cuál es la forma más limpia de anular el hallazgo de ActiveRecord para modelos y colecciones?
Tengo un código de biblioteca que anula el método de búsqueda de Ar. También incluyo el módulo para todas las clases de la Asociación para que tanto MyModel.find como @ parent.my_models.find funcionen y apliquen el alcance correcto.
Basé mi código en will_paginate's:
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
Mi problema es que solo quiero anular los buscadores para algunos modelos. Actualmente necesito extender todas las clases de colección de asociación que comparten todos los modelos. Sé que puedo extender asociaciones por modelo pasando un módulo:
has_many :things, :extend => SomeCustomMethods
Pero mi biblioteca es básicamente un complemento ActiveRecord, por lo que me gustaría una convención limpia para las extensiones de buscador conectables que se aplican tanto al modelo como a las colecciones de alcance sin afectar a todos los modelos de la aplicación.