У меня неприятная проблема с помощью has_many: а именно, тот факт, что сквозные модели не создаются до сохранения. К сожалению, мне нужно установить данные для этих моделей перед сохранением родительского элемента.
Вот свободные настройки:
class Wtf < ActiveRecord::Base
belongs_to :foo
belongs_to :bar
end
class Bar < ActiveRecord::Base
has_many :wtfs
has_many :foos, :through => :wtfs
end
class Foo < ActiveRecord::Base
has_many :wtfs
has_many :bars, :through => :wtfs
def after_initialize
Bar.all.each do |bar|
bars << bar
end
end
end
Все хорошо, за исключением того, что мне нужно получить доступ к "wtf" перед сохранением:
f = Foo.new
=> #
f.bars
=> [список баров]
пустой список здесь
f.wtfs
=> []
f.save!
=> правда
теперь я получаю вещи
f.wtfs
=> [список вещей]
Я даже зашел так далеко, что явно создал wtfs следующим образом:
def after_initialize
Bar.all.each do |bar|
wtfs << Wtf.new( :foo => self, :bar => bar, :data_i_need_to_set => 10)
end
end
Это приводит к заполнению f.wtfs, но не баров. Когда я сохраняю и получаю, я получаю вдвое больше ожидаемых значений.
У кого-нибудь есть идеи?