Rails Active::Records 在检测到重复字段时创建不完整的嵌套记录

Rails Active::Records creates incomplete nested records, when duplicate field detected

我创建了一个类似于 Active::Record 示例的 table 结构来连接 tables。书籍 table 具有以下嵌套关系:

(book: {reviews: { customer: :orders}})

我正在通过 post 请求提交表单中的所需信息。如果电子邮件地址已经存在,则在另一个客户记录中,将在响应中发送电子邮件错误。但是,所有其他记录(预订、评论和订单)仍会在没有客户的情况下创建。发生电子邮件错误时,如何停止创建所有记录?我的控制器使用新方法创建每条记录,然后在保存前进行验证,见下文。

person_controller.rb:

@book = Book.new title: "new book", year_published: 2021
authorize @book
@book.save
@customer = Customer.new name: attribute_params["name"], email: attribute_params["email"]
authorize @customer
@customer.save
@review = Review.new title: "terrible title", customer: @customer, book: @book
authorize @review
@review.save
@order = Order.new date_submitted: Time.now, customer: @customer
authorize @order
@order.save

要直接回答您的问题,您需要将代码放在 Transaction 中并使用保存!相反。

如果块中的任何地方出现异常,交易将确保不会保存任何内容。