我对Rails和Ruby比较陌生,遇到了以下问题。
我有3个对象:
名为Partner
的父对象
Tariffs
Tariff
的对象
Partner
User
的子对象有一个关系
Tariff
当我创建新的合作伙伴(partner = Partner.new
)和新的关税(tariff = Tariff.new
)并将关税添加到合作伙伴(Partner.tariffs << tariff
)时,我可以通过通过执行partner.save!
与IT关系。
但是在我的情况下,我也从数据库(user = User.find.last
)获得了一个用户,并希望在将所有内容保存到数据库之前直接添加与关税的关联。这是因为我想在1个事务中保存/更新所有内容,以便在发生错误时对所有内容进行角色支持。
我尝试了多种方法来实现这一目标,但我无法完成。我以为会是这样:
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
,只要对象没有保存到数据库中即可。
如果有人能帮助我,那就太好了,谢谢!
答案 0 :(得分:0)
我这样解决了我的问题:
partner = Partner.new
tariff = Tariff.new
partner.tariffs << tariff
ActiveRecord::Base.transaction.do
partner.save!
user.update_attributes(:tariff_id => tariff.id)
end
之所以有用,是因为关税对象在调用save方法后有了一个主意。当伙伴被保存时,关税也被保存,因为孩子是伙伴的新对象和第一级孩子。不幸的是,孩子的孩子不会自动保存。