diff options
Diffstat (limited to 'activerecord/lib/active_record/associations/builder')
-rw-r--r-- | activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations/builder/has_one.rb | 19 |
2 files changed, 8 insertions, 13 deletions
diff --git a/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb b/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb index 6ad4c75fb5..2072f93194 100644 --- a/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb +++ b/activerecord/lib/active_record/associations/builder/has_and_belongs_to_many.rb @@ -62,7 +62,7 @@ module ActiveRecord::Associations::Builder # :nodoc: def middle_reflection(join_model) middle_name = [lhs_model.name.downcase.pluralize, - association_name].join("_").gsub("::", "_").to_sym + association_name.to_s].sort.join("_").gsub("::", "_").to_sym middle_options = middle_options join_model HasMany.create_reflection(lhs_model, diff --git a/activerecord/lib/active_record/associations/builder/has_one.rb b/activerecord/lib/active_record/associations/builder/has_one.rb index 27ebe8cb71..db8393930e 100644 --- a/activerecord/lib/active_record/associations/builder/has_one.rb +++ b/activerecord/lib/active_record/associations/builder/has_one.rb @@ -32,15 +32,12 @@ module ActiveRecord::Associations::Builder # :nodoc: end end - def self.touch_record(o, name, touch) - record = o.send name + def self.touch_record(record, name, touch) + instance = record.send(name) - return unless record && record.persisted? - - if touch != true - record.touch(touch) - else - record.touch + if instance&.persisted? + touch != true ? + instance.touch(touch) : instance.touch end end @@ -48,11 +45,9 @@ module ActiveRecord::Associations::Builder # :nodoc: name = reflection.name touch = reflection.options[:touch] - callback = lambda { |record| - HasOne.touch_record(record, name, touch) - } - + callback = -> (record) { HasOne.touch_record(record, name, touch) } model.after_create callback, if: :saved_changes? + model.after_create_commit { association(name).reset_negative_cache } model.after_update callback, if: :saved_changes? model.after_destroy callback model.after_touch callback |