如何确保子模型验证失败时父模型不会保存

时间:2018-02-13 20:53:20

标签: ruby-on-rails activerecord associations

class User < ApplicationRecord 
  has_many :books
  delegate :title,:pages,:paragraphs to: book_attributes
end

class Book < ApplicationRecord
  belongs_to :user
  validates :title, length: { maximum: 35}

end

当我使用相关书籍创建用户时,即使书籍验证错误,即我创建一个超过35个字符的标题,用户也会被保存。

  

如何确保在验证用户时不会保存用户   书模型失败了。

1 个答案:

答案 0 :(得分:0)

ActiveRecord::Base.transaction do
  user = User.new(user_params)
  book = Book.new(book_params)
  user.save!
  book.save!
end

有趣的是,您的用户依赖于书籍才能创建,但您可以在Rails中使用Transaction。如果没有在块中引发异常,则仅保存到DB。