diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-12-20 01:06:21 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-20 01:06:21 +0900 |
commit | eb6baccda26d65c70d0e2df28c6cd51ec3cdb2ac (patch) | |
tree | 100a0689006c2b7c59b95d9150702169345eef8f /activemodel/lib/active_model | |
parent | 011f76e57b145b9e5ef1fd520df7d7096cf8896a (diff) | |
parent | 470d0e459f2d1cb8e6d5c0a8a2fe3282ca65690e (diff) | |
download | rails-eb6baccda26d65c70d0e2df28c6cd51ec3cdb2ac.tar.gz rails-eb6baccda26d65c70d0e2df28c6cd51ec3cdb2ac.tar.bz2 rails-eb6baccda26d65c70d0e2df28c6cd51ec3cdb2ac.zip |
Merge pull request #31483 from yhirano55/fix_validation_callbacks_on_multiple_context_in_active_model
Bugfix: validation callbacks on multiple context
Diffstat (limited to 'activemodel/lib/active_model')
-rw-r--r-- | activemodel/lib/active_model/validations/callbacks.rb | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/activemodel/lib/active_model/validations/callbacks.rb b/activemodel/lib/active_model/validations/callbacks.rb index 4d0ab2a2fe..11a8b2b229 100644 --- a/activemodel/lib/active_model/validations/callbacks.rb +++ b/activemodel/lib/active_model/validations/callbacks.rb @@ -54,14 +54,16 @@ module ActiveModel # person.valid? # => true # person.name # => "bob" def before_validation(*args, &block) - options = args.last - if options.is_a?(Hash) && options[:on] - options[:if] = Array(options[:if]) - options[:on] = Array(options[:on]) + options = args.extract_options! + options[:if] = Array(options[:if]) + + if options.key?(:on) options[:if].unshift ->(o) { - options[:on].include? o.validation_context + !(Array(options[:on]) & Array(o.validation_context)).empty? } end + + args << options set_callback(:validation, :before, *args, &block) end @@ -95,13 +97,15 @@ module ActiveModel options = args.extract_options! options[:prepend] = true options[:if] = Array(options[:if]) - if options[:on] - options[:on] = Array(options[:on]) + + if options.key?(:on) options[:if].unshift ->(o) { - options[:on].include? o.validation_context + !(Array(options[:on]) & Array(o.validation_context)).empty? } end - set_callback(:validation, :after, *(args << options), &block) + + args << options + set_callback(:validation, :after, *args, &block) end end |