ruby-on-rails - 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
解决方案
要直接回答您的问题,您需要将代码放入事务中并使用保存!反而。
如果块中的任何地方出现异常,该事务将确保不会保存任何内容。
推荐阅读
- c# - 如何将图像放置在按钮的最右端?
- ansible - Ansible 循环和打印字典变量
- transactions - 我们如何停止在 InterSystems IRIS 实例上记录日志?
- javascript - 重新格式化 JS 对象以获得年/月/周总计
- google-chrome-extension - Safari中的选项页面onMessage未收到sendMessage
- chromium - 转换失败。找不到 Chromium 二进制文件(尝试从 *[Project]\Chromium\ 加载)
- c++ - 如何在枚举中使用虚函数?
- typescript - 根据数组值获取联合类型的子集
- android - 我可以为可组合函数切换状态变量吗?
- apache-spark - Apache Spark (PySpark):对 parquet 数据进行全局排序并按相等大小划分