我对Rails和Ruby还比较陌生,遇到了以下问题。
我有3个对象:
-
名为
Partner
的父对象- 有许多
Tariffs
- 有许多
- 名为
Tariff
的对象- 属于
Partner
- 属于
- 与名为
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.id
和partner.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方法后,关税对象有了一个想法。当合作伙伴被保存时,关税也会被保存,因为孩子是新对象和合作伙伴的一级孩子。不幸的是,子项的子项不会自动保存。