ruby-on-rails - 导轨。在一个事务中创建一个对象及其关联
问题描述
我需要在创建步骤中创建一个带有关联项目的对象。虽然我先尝试过创建,然后再创建第二个,但这会产生问题,如果第二个失败,那么我会完成前半部分。
- 关系一个用户有很多公司
我的意思是
user = User.create!(
email: prospect.email,
first_name: prospect.first_name,
last_name: prospect.last_name,
#birthdate:prospect.user_birthday,
id_number: prospect.id_number,
phone: prospect.phone,
address: prospect.address,
password: prospect.id_number,
password_confirmation: prospect.id_number,
company = user.companies.create(
name: prospect.vat_company_name,
plan: prospect.plan,
address: prospect.address,
description: prospect.company_description,
email: prospect.email,
phone: prospect.phone,
network_id: prospect.network_id
)
current_company_id: company.id
)
这当然失败了,因为也许它不能直接完成。
我尝试过构建而不是创建,但结果相同。
我也知道第二次创建会失败,因为第一个对象还不存在。
最好的方法是怎样的?
解决方案
您可以分别创建它们并将它们包装在事务中:
ActiveRecord::Base.transaction do
user = User.create!(...)
company = Company.create!(...)
end
这样,如果其中一个失败,另一个最终不会被提交到数据库。
推荐阅读
- macos - fastlane 是否能够发布到 Mac App Store
- javascript - ngbrating 触发率在初始化时更改
- javascript - 如何预加载本地图像?
- vba - 如何自动导入资源缺勤天数?
- angular - Ionic 3 首次加载时找不到名称“google”
- asp.net-core - 将报告从 ASP .NET API 馈送到 ASP .NET Core 应用程序
- android - 如何解决应用合并发布资源问题?
- javascript - 正则表达式:在某些特殊字符后大写非ASCII字符
- scala - 无法使用 flink 在 scala 中实例化用户函数
- sql - SQL 日期相同但时间不同