这是我的情况:
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 分配给 first 的原因nil
是,从那个角度来看,我不一定知道关联的名称。实际代码如下所示:
foo2.bars << bar2
我无法轻松执行字符串解析,因为模型类型可能与外键不对应。它还受到多态关联或 STI 模型的干扰。这就是为什么我更喜欢上面的“只是工作”而不必到达
bar2.foo = nil
只是因为我的父模型是Foo
一流的。为了清楚起见,假设 Foo < FooBar。现在,即使我要做类似的事情:
foo2.class.name.foreign_key
当实际的外键是“foo_bar_id”时,这将评估为“foo_id”。
使用运算符时有没有办法强制覆盖外键<<
?