如何检查ActiveRecord :: Base.transaction是否成功?
如果出现问题,我希望回滚发生,但我也想确保如果事务成功,我会做一些额外的逻辑。这是代码:
#...
ActiveRecord::Base.transaction do
user_id = existing_ids.last || User.create(phone: phone_number)
homes.update_all(user_id: user_id)
end
if transaction_was_success
# do something
else
# do something else
end
答案 0 :(得分:1)
要在成功完成交易后执行额外工作,您可以使用after_commit
回调。
要在事务期间发生故障时触发回滚,请使用!
方法。使用update_all
方法的问题是它不会引发任何错误。 update_attribute!
是!
方法,因此会在失败时引发错误。如果任何更新或创建失败,现在将回滚事务。
after_commit :successful_commit
ActiveRecord::Base.transaction do
user_id = existing_ids.last || User.create!(phone: phone_number)
homes.each do |home|
home.update_attribute!(user_id: user_id)
end
# Or do other things here...
end
def successful_commit
# Something on success here...
end