0

これが私の状況です:

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」に評価されます。

<<演算子を使用するときに外部キーを強制的にオーバーライドする方法はありますか?

4

0 に答える 0