diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-12 22:10:04 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-12 22:10:04 +0900 |
commit | 186566c58a559452883ae9f7a2d837ebf40be1f4 (patch) | |
tree | b1542673205237111b916d52da20f6ee8dced411 /activerecord/lib/active_record/transactions.rb | |
parent | 8c249086823eecd23e2e7bd6084ca30ee0e0f6d5 (diff) | |
parent | 9252da96597fbffe2246704556524c4804239552 (diff) | |
download | rails-186566c58a559452883ae9f7a2d837ebf40be1f4.tar.gz rails-186566c58a559452883ae9f7a2d837ebf40be1f4.tar.bz2 rails-186566c58a559452883ae9f7a2d837ebf40be1f4.zip |
Merge pull request #35920 from kamipo/dont_call_commit_callbacks_for_invalid_record
Don't call after_commit callbacks despite a record isn't saved
Diffstat (limited to 'activerecord/lib/active_record/transactions.rb')
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index a45d228298..333f1a5435 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -376,9 +376,19 @@ module ActiveRecord def with_transaction_returning_status status = nil self.class.transaction do - add_to_transaction + unless has_transactional_callbacks? + sync_with_transaction_state + set_transaction_state(self.class.connection.transaction_state) + end + remember_transaction_record_state + status = yield raise ActiveRecord::Rollback unless status + ensure + if has_transactional_callbacks? && + (@_new_record_before_last_commit && !new_record? || _trigger_update_callback || _trigger_destroy_callback) + self.class.connection.add_transaction_record(self) + end end status end |