У меня есть следующая модель:
class Property < ActiveRecord::Base
has_and_belongs_to_many :property_values
end
Что я хотел бы сделать, это расширить любое значение, возвращаемое находкой в расширении property_values, с помощью модуля, который определяется атрибутом Property.объект.Я пытался что-то вроде этого:
class Property < ActiveRecord::Base
has_and_belongs_to_many :property_values, :extend => PropertyUtil::Extensible
def enrich(to_extend)
modules.split(/\s*,\s*/).each do |mod|
to_extend.extend(Properties.const_get(mod.to_sym))
end
end
end
module PropertyUtil
module Extensible
def self.extended(mod)
mod.module_eval do
alias old_find find
end
end
def find(*args)
old_find(*args).map{|prop| proxy_owner.enrich(prop)}
end
end
end
Где все модули, которые могут быть выбраны, определены в модуле Свойства.Однако при попытке запустить этот код возникает пара проблем;во-первых, к моему удивлению, ни один из динамических искателей (property_values.find_by_name и т. д.) не может быть делегирован для поиска;во-вторых, кое-что из того, как я сделал псевдоним, приводит к переполнению стека, когда я пытаюсь запустить поиск напрямую.
Есть ли способ сделать то, что я пытаюсь сделать?Какой метод можно использовать для псевдонима и переопределения таким образом, чтобы все результаты, возвращаемые расширением ассоциации, независимо от того, как они были получены, были расширены соответствующими модулями?