Rails 中的事务
Rails 的事务使用方法有两种:
第一种使用方法:直接使用 ActiveRecord::Base
中的事务,如:
ActiveRecord::Base.transaction do
或许会产生异常的处理
end
不产生异常时的处理
rescue => e
产生异常时的处理
第二种,使用模型的事务。由于模型继承了 ActiveRecord::Base
,所以模型也包含了事务:
模型.transaction do
或许会产生异常的处理
end
不产生异常时的处理
rescue => e
产生异常时的处理
Rails 中多表事务
Rails 在使用事务时经常会涉及多张表。比如一个 Release
的实例会关联多个 WorkOrder
实例,那么在事务中先存储 Release
,然后存储 WorkOrder
时触发异常(比如 redmine_id
的唯一性约束):
Release.transaction do
release = Release.create
release.work_orders.create!(redmine_id:1)
release.work_orders.create!(redmine_id:1)
end
经实验,Release
和 WorkOrder
都会回滚。
雁过留声,人过留评