aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/builder
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2018-05-28 00:06:02 +0900
committerRyuta Kamizono <kamipo@gmail.com>2018-07-30 00:03:16 +0900
commit975fa15b47e4ef47a3b46f0e946860a076167149 (patch)
tree055e43b7bb8306e16ba89d66784c38deab1e0ea4 /activerecord/lib/active_record/associations/builder
parent14931e537f3dcd522b68a5b640aa47272602a137 (diff)
downloadrails-975fa15b47e4ef47a3b46f0e946860a076167149.tar.gz
rails-975fa15b47e4ef47a3b46f0e946860a076167149.tar.bz2
rails-975fa15b47e4ef47a3b46f0e946860a076167149.zip
Extract `Relation#update_counters` for internal use
The target object for counter cache is not always determined by the primary key value on the model. I'd like to extract `update_couters` onto the `Relation` for the internal use.
Diffstat (limited to 'activerecord/lib/active_record/associations/builder')
-rw-r--r--activerecord/lib/active_record/associations/builder/belongs_to.rb10
1 files changed, 4 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/associations/builder/belongs_to.rb b/activerecord/lib/active_record/associations/builder/belongs_to.rb
index 4b6cb76081..b5fb0092d7 100644
--- a/activerecord/lib/active_record/associations/builder/belongs_to.rb
+++ b/activerecord/lib/active_record/associations/builder/belongs_to.rb
@@ -48,14 +48,12 @@ module ActiveRecord::Associations::Builder # :nodoc:
foreign_key_was = attribute_before_last_save foreign_key
foreign_key = attribute_in_database foreign_key
- if foreign_key && model.respond_to?(:increment_counter)
- foreign_key = counter_cache_target(reflection, model, foreign_key)
- model.increment_counter(cache_column, foreign_key)
+ if foreign_key && model < ActiveRecord::Base
+ counter_cache_target(reflection, model, foreign_key).update_counters(cache_column => 1)
end
- if foreign_key_was && model_was.respond_to?(:decrement_counter)
- foreign_key_was = counter_cache_target(reflection, model_was, foreign_key_was)
- model_was.decrement_counter(cache_column, foreign_key_was)
+ if foreign_key_was && model_was < ActiveRecord::Base
+ counter_cache_target(reflection, model_was, foreign_key_was).update_counters(cache_column => -1)
end
end
end