以下是我的情况:
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&lt; FooBar的。现在即使我做了类似的事情:
foo2.class.name.foreign_key
当实际外键为“foo_bar_id”时,这将评估为“foo_id”。
使用<<
运算符时,有没有办法强制覆盖外键?