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 分配给 first 的原因nil是,从那个角度来看,我不一定知道关联的名称。实际代码如下所示:

foo2.bars << bar2

我无法轻松执行字符串解析,因为模型类型可能与外键不对应。它还受到多态关联或 STI 模型的干扰。这就是为什么我更喜欢上面的“只是工作”而不必到达

bar2.foo = nil

只是因为我的父模型是Foo一流的。为了清楚起见,假设 Foo < FooBar。现在,即使我要做类似的事情:

foo2.class.name.foreign_key当实际的外键是“foo_bar_id”时,这将评估为“foo_id”。

使用运算符时有没有办法强制覆盖外键<<

4

0 回答 0