2016-11-25 75 views
0

比方说,我有这样的简单关联:保存在同一时间,错误HANDELING

class Post < ActiveRecord::Base 
    has_many :comments # :autosave option is not declared 
end 

而这种代码:

post = Post.new(title: 'ruby rocks') 
post.comments.build(body: 'hello world') 
post.save # => saves both post and comment 

会发生什么,如果post是无效的,它仍然创造有何评论?

如果连接的comment无效,会发生什么情况?

我想那commentpost是无效的,它什么也不保存。我做对了吗?

我需要validates_associated?谢谢

回答

0

如果该信息是无效的,它不会保存相关记录。根据Active Record Autosave Association上的文档:

保存父项及其关联和销毁标记的关联都发生在一个事务中。这绝不应该使数据库处于不一致的状态。

如果还必须验证子记录,则您确实需要validates_associated。但是请注意,只需在协会的一侧拨打validates_associated,否则您将创建一个循环参考。

+0

意思是我应该使用'validates_associated' –

+0

是的,把validates_associated放在你的Post模型中,但不是在你的Comment模型中。 – mysmallidea