Скажем, у меня есть класс, как:Динамический экземпляр Rails вложенного подкласса STI?
class Basket < ActiveRecord::Base
has_many :fruits
Где «фрукты» является базовым классом STI, имеющий подклассов, как «яблоки», «апельсины», и т.д ...
Я хотел бы иметь возможность иметь метод сеттер в корзине, как:
def fruits=(params)
unless params.nil?
params.each_pair do |fruit_type, fruit_data|
fruit_type.build(fruit_data)
end
end
end
Но, очевидно, я получаю исключение, как:
NoMethodError (undefined method `build' for "apples":String)
Обходной я думал как это работает:
def fruits=(params)
unless params.nil?
params.each_pair do |fruit_type, fruit_data|
"#{fruit_type}".create(fruit_data.merge({:basket_id => self.id}))
end
end
end
Но что заставляет объект Фруктовая ИППП быть создан до того Баскет класса, и поэтому ключ basket_id не сохраняется в подклассе Fruit (потому что basket_id Безразлично» t существует еще).
Я полностью в тупике. У кого-нибудь есть идеи?
Это работает для моих целей. Но если я правильно понимаю это, это означает, что любые обратные вызовы, которые могут быть у меня на моих подклассах STI, не будут выполняться, правильно? –
К сожалению, да. См. Мой отредактированный ответ. – zetetic
Удивительный! Большое спасибо! –