diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2015-12-06 21:18:15 +0100 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2015-12-06 21:18:15 +0100 |
commit | a246a69e92a8ed54eb569a662dbaba16d743b2b7 (patch) | |
tree | 3b40780b4ee790367a6dde94d75f2e2608c41e1d /activerecord/lib/active_record/transactions.rb | |
parent | 09dde024d3b85a74d2efc233fc309089757a28cf (diff) | |
parent | 5a300b2ed6b603474a7ee44d081da9e69465ec10 (diff) | |
download | rails-a246a69e92a8ed54eb569a662dbaba16d743b2b7.tar.gz rails-a246a69e92a8ed54eb569a662dbaba16d743b2b7.tar.bz2 rails-a246a69e92a8ed54eb569a662dbaba16d743b2b7.zip |
Merge pull request #22516 from gsamokovarov/after-create-update-destroy-commit
Introduce after_{create,update,delete}_commit callbacks
Diffstat (limited to 'activerecord/lib/active_record/transactions.rb')
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 8de82feae3..38ab1f3fc6 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -233,6 +233,24 @@ module ActiveRecord set_callback(:commit, :after, *args, &block) end + # Shortcut for +after_commit :hook, on: :create+. + def after_create_commit(*args, &block) + set_options_for_callbacks!(args, on: :create) + set_callback(:commit, :after, *args, &block) + end + + # Shortcut for +after_commit :hook, on: :update+. + def after_update_commit(*args, &block) + set_options_for_callbacks!(args, on: :update) + set_callback(:commit, :after, *args, &block) + end + + # Shortcut for +after_commit :hook, on: :destroy+. + def after_destroy_commit(*args, &block) + set_options_for_callbacks!(args, on: :destroy) + set_callback(:commit, :after, *args, &block) + end + # This callback is called after a create, update, or destroy are rolled back. # # Please check the documentation of #after_commit for options. @@ -268,9 +286,11 @@ module ActiveRecord private - def set_options_for_callbacks!(args) - options = args.last - if options.is_a?(Hash) && options[:on] + def set_options_for_callbacks!(args, enforced_options = {}) + options = args.extract_options!.merge!(enforced_options) + args << options + + if options[:on] fire_on = Array(options[:on]) assert_valid_transaction_action(fire_on) options[:if] = Array(options[:if]) |