保存主对象时,ActiveRecord是否保存belongs_to关联?

时间:2010-02-09 18:22:50

标签: ruby-on-rails activerecord associations

如果我有两个型号:

class Post < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end

如果我这样做:

post = Post.new
user = User.new
post.user = user
post.save

用户是否也得到了保存,并且在post的{​​{1}}字段中正确分配了主键?

3 个答案:

答案 0 :(得分:17)

ActiveRecord belongs_to关联可以与父模型一起自动保存,但默认情况下该功能处于关闭状态。启用它:

class Post < ActiveRecord::Base
  belongs_to :user, :autosave => true
end

答案 1 :(得分:7)

我相信你想要:

class User < ActiveRecord::Base
    has_many :posts, :autosave => true
end

换句话说,在保存用户记录时,请找出“帖子”关联另一侧的所有记录并保存。

答案 2 :(得分:1)

belongs_to API documentation说(Rails 4.2.1):

  

:autosave

     

如果为true,则在保存父对象时,始终保存关联对象或在标记为销毁时将其销毁。

     

如果为false,则永远不要保存或销毁关联的对象。

     

默认情况下,仅保存关联的   对象,如果它是一个新记录。

     

请注意,accepts_nested_attributes_for将:autosave设置为true。

在您的情况下,用户是新记录,因此将自动保存。

许多人也错过了关于accepts_nested_attributes_for的最后一句话。