Rails用关联id更新外键

时间:2015-05-12 20:09:48

标签: ruby-on-rails activerecord

我与id有关联,但是没有设置外键。

一些设置:

Foo has_many :bars
Bar belongs_to :foo

foo = Foo.new.save
bar = Bar.new(foo: foo)

输出:

bar.foo = foo
bar.foo.id = 1
bar.foo_id = nil # Why is this nil!?

除了分配bar.foo_id = 1之外,是否有更新相关外键的方法,因此bar.foo_id == 1 不保存

必须有某种#update_foreign_keys#update_associations方法,对吧?

我使用Ruby 2.1.2运行Rails 4.2

1 个答案:

答案 0 :(得分:1)

id由数据库设置,而不是由rails设置,这就是为什么是空的。

您需要保存每个对象才能获得ID。

您可以将对象保存在事务中,以便在需要执行任何魔法时获取该对象。

关于代码:

bar.foo = foo
bar.foo.id = 1            <- This retrieves the ruby#object_id
bar.foo_id = nil          <- This retrieves the database#id

这就是为什么第二个是零。