我有一个场景,我会在循环中更新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的更新。如何使用活动记录事务执行此操作?
答案 0 :(得分:1)
最简单的方法是使用ActiveRecord :: Transactions
将finacial事务视为一个示例,如果后续插入失败,必须回滚一个插入。
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