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

问题描述

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

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

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

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 并使用 save!相反。

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