首页 > 解决方案 > Rails Active::Records 在检测到重复字段时创建不完整的嵌套记录

问题描述

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

(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

标签: ruby-on-railsjoinnestedtable-relationships

解决方案


要直接回答您的问题,您需要将代码放入事务中并使用保存!反而。

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


推荐阅读