我有一个场景,我将在循环上更新Model1,循环结束后我将保存Model2,但我需要在Model2保存失败时回滚更新
@var1 = Model1.new
@var1.model2 = @var2
(1..5).each do |value|
if (condition)
@var1.send("field#{value}_st") = val1
@var1.send("field#{value}_nd") = val2
@var1.send("field#{value}_rd") = val3
@var2.update_attributes(f1 => val4)
end
end
if @var1.save
....
....
else
rollback
end
所以我想在@var1.save失败时回滚@var2的更新。我如何使用活动记录事务来做到这一点?
最简单的方法是使用ActiveRecord::Transactions
以金融事务为例,如果后续插入失败,则必须回滚一个插入。
ActiveRecord::Base.transaction do
david.withdrawal(100)
mary.deposit(100)
end
在现有的插入中尝试此操作。我认为这就是你想要的
@var1 = Model1.new
@var1.model2 = @var2
ActiveRecord::Base.transaction do
(1..5).each do |value|
@var1.send("field#{value}_st") = val1
@var1.send("field#{value}_nd") = val2
@var1.send("field#{value}_rd") = val3
@var2.update_attributes(f1 => val4)
end
@var1.save
end