如何回滚保存在rails中的另一个保存失败?

时间:2015-05-18 05:41:27

标签: ruby-on-rails ruby-on-rails-4 transactions rails-activerecord

我有一个场景,我会在循环中更新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的更新。如何使用活动记录事务执行此操作?

1 个答案:

答案 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
相关问题