我对 has_many through 有一个令人沮丧的问题:即在保存之前不会创建直通模型这一事实。不幸的是,我需要在保存父模型之前在这些模型上设置数据。
这是松散的设置:
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.保存!=> 真
现在我得到东西
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,但不会填充条。当我保存和检索时,我得到了预期的 wtfs 的两倍。
有人有想法么?