外部事务回滚不起作用

时间:2019-03-25 10:33:04

标签: ruby-on-rails-3

我正在尝试更新数据库中的几条记录,但是很不幸。

我希望这种操作是原子的(使用事务)。 我想要的是我需要更新表1中的几个属性和表2中的几个属性。

如果更新过程在任何表中失败,则我希望对两个表中进行的所有更改进行回滚。

以下是我无法使用的代码:

    def make_settings(account,attributeToUpdate,attribute_type)
    A.transaction do
      B.transaction do
          if attribute_type == "ADVANCED"
          self.user.create_or_update_attribute(attributeToUpdate[0],attributeToUpdate[1].to_s)
          end
     if attribute_type == "BASIC"
        us = account.user.user_setting.reload
        us[attributeToUpdate[0]] = attributeToUpdate[1]
        us.save!
      end
    end
  end 
end

现在发生了什么: 如果属性类型为ADVANCED,则表A中的属性很少会成功更新。然后,流程将继续更新表B中的属性,但是这样做会出错。

现在我想要的是当表B中的更新失败时,那么在表A中添加/更新的记录也应该被删除/更新。但这没有发生。

有人可以帮忙吗? 谢谢

0 个答案:

没有答案