has_many throughでイライラする問題が発生しています。つまり、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.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は入力されますが、バーは入力されません。保存して取得すると、予想されるwtfsの2倍になります。
誰かアイデアはありますか?