ActiveRecord-如何在保存所有对象之前将(未保存)父对象的(未保存的)子对象与另一个对象相关联



我对Rails和Ruby还比较陌生,遇到了以下问题。

我有3个对象:

  1. 名为Partner的父对象

    • 有许多Tariffs
  2. 名为Tariff的对象
    • 属于Partner
  3. 与名为User的子对象有一个关系的第三个对象
    • 属于Tariff

当我创建一个新的合作伙伴(partner = Partner.new(和一个新资费(tariff = Tariff.new(并将资费添加到合作伙伴(Partner.tariffs << tariff(时,我可以通过执行partner.save!来保存合作伙伴与它的关系。

但在我的情况下,我也从数据库(user = User.find.last(中获得了一个用户,并希望在将所有内容保存到数据库之前直接添加与关税的关联。这是因为我想在一个事务中保存/更新所有内容,这样在出现错误时,所有内容都将得到角色备份。

我尝试了很多方法来实现这一点,但我做不到。我以为会是这样的:

partner = Partner.new
tariff = Tariff.new
partner.tariffs << tariff
user = User.find.last
user.tariff = tariff
ActiveRecord::Base.transaction.do
partner.save!
user.save!
end

partner = Partner.new
tariff = Tariff.new
partner.tariffs << tariff
user = User.find.last
user.tariff = tariff
ActiveRecord::Base.transaction.do
partner.save!
user.save!
end

partner = Partner.new
tariff = Tariff.new
partner.tariffs << tariff
user = User.find.last
user.tariff_id = tariff.id (or something similar) 
ActiveRecord::Base.transaction.do
partner.save!
user.save!
end

我知道我的一些案例/示例无法工作,因为只要对象没有保存到数据库中,就没有tariff.idpartner.tariff.last

如果有人能帮我就好了,提前谢谢!

我这样解决了我的问题:

partner = Partner.new
tariff = Tariff.new
partner.tariffs << tariff
ActiveRecord::Base.transaction.do
partner.save!
user.update_attributes(:tariff_id => tariff.id)
end

这之所以有效,是因为在调用save方法后,关税对象有了一个想法。当合作伙伴被保存时,关税也会被保存,因为孩子是新对象和合作伙伴的一级孩子。不幸的是,子项的子项不会自动保存。

相关内容

  • 没有找到相关文章

最新更新