首页 > 解决方案 > 导轨。在一个事务中创建一个对象及其关联

问题描述

我需要在创建步骤中创建一个带有关联项目的对象。虽然我先尝试过创建,然后再创建第二个,但这会产生问题,如果第二个失败,那么我会完成前半部分。

我的意思是

  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
  )

这当然失败了,因为也许它不能直接完成。

我尝试过构建而不是创建,但结果相同。

我也知道第二次创建会失败,因为第一个对象还不存在。

最好的方法是怎样的?

标签: ruby-on-railsruby

解决方案


您可以分别创建它们并将它们包装在事务中:

ActiveRecord::Base.transaction do
  user = User.create!(...)
  company = Company.create!(...)
end

这样,如果其中一个失败,另一个最终不会被提交到数据库。


推荐阅读