これが私の状況です:
class Foo
has_many :bars
end
class Bar
belongs_to :foo
end
foo1 = Foo.create
foo2 = Foo.create
bar1 = foo1.bars.create
bar2 = foo1.bars.create
ご覧のとおり、両方のバーが foo1 に属しているため、それらの foo_id は1
です。今:
foo2 << bar2
これで bar2 の foo_id を に設定したいと思い2
ます。ただし、foo_id が既に設定されている場合 (この場合は既に foo1 に属しているため)、上書きされないようです。bar2 の foo を最初に割り当てたくない理由はnil
、その観点から関連付けの名前を必ずしも知っているとは限らないからです。実際のコードは次のようになります。
foo2.bars << bar2
モデルタイプが外部キーに対応していない可能性があるため、文字列の解析を簡単に実行できません。また、多型関連または STI モデルの存在によって妨げられます。これが、上記に到達することなく「ただ機能する」ことを好む理由です。
bar2.foo = nil
私の親モデルがFoo
クラスだからです。明確にするために、Foo < FooBar としましょう。今、私が次のようなことをしたとしても:
foo2.class.name.foreign_key
実際の外部キーが「foo_bar_id」の場合、これは「foo_id」に評価されます。
<<
演算子を使用するときに外部キーを強制的にオーバーライドする方法はありますか?