假设我有这个:
class Pirate < ActiveRecord::Base
has_many :parrots
validates_presence_of :name
end
class Parrot < ActiveRecord::Base
belongs_to :pirate
end
我已经有 ids 1 到 10 的现有 Pirates 和 Parrots。现在我想这样做:
p = Pirate.first
p.name = nil
p.parrot_ids = [1,2,3]
p.save if p.valid?
因为盗版对象无效(缺少名称),所以我不想保存它。但是,鹦鹉现在与海盗相关联,并且已在数据库中提交。
如何分配鹦鹉,但只有在 p.save 成功时才将鹦鹉的链接保存到数据库中?即,如何在一笔交易中保存海盗和鹦鹉的链接?
最佳答案
您可能应该看看 Active Record 事务。
您可以将代码包装在事务块中。事务是保护块,其中 SQL 语句只有在它们都可以作为一个原子操作成功时才是永久的
http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
关于ruby-on-rails - 如何将现有记录添加到 has_many 而不立即保存到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291115/