我正在尝试更新数据库中的几条记录,但是很不幸。
我希望这种操作是原子的(使用事务)。 我想要的是我需要更新表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中添加/更新的记录也应该被删除/更新。但这没有发生。
有人可以帮忙吗? 谢谢