Đức hạnh khoác mành che mặt, sự xấu xa khoác mặt nạ. Virtue has a veil, vice a mask.
Victor Hugo
Khi sử dụng transaction trong RoR, có lúc ta không cần phải gọi câu lệnh ActiveRecord::Rollback , cũng có lúc ta phải gọi nó.
Xét ví dụ:
self.transaction do
first_operation
begin
second_operation
call_other_function
rescue Exception => e
#deal with the error
raise ActiveRecord::Rollback #force a rollback
end
end
- Nếu bỏ
raise ActiveRecord::Rollback: Mọi thay đổi tới DB xảy ra ở second_operation và call_other_function đều được rollback trong trường hợp có lỗi xảy ra ở 2 chỗ đấy nhưng first_operation sẽ không được rollback - Nếu bạn muốn cả first_operation phải được rollback thì bạn phải gọi
raise ActiveRecord::Rollbacknhư đoạn code trên.
Link tham khảo:
https://stackoverflow.com/questions/2700727/does-rails-do-a-rollback-if-i-use-begin-rescue
Comments
