保存在同一时间,错误handeling

时间:2016-11-25 22:02:13

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我们说我有这个简单的关联:

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吗?谢谢

1 个答案:

答案 0 :(得分:0)

如果帖子无效,则不会保存相关记录。根据{{​​3}}上的文档:

  

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

如果必须验证子记录,则需要validates_associated。但请注意,只能在关联的一侧调用validates_associated,否则您将创建一个循环引用。