aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/has_many_association.rb
diff options
context:
space:
mode:
authorBogdan Gusiev <agresso@gmail.com>2015-10-03 16:36:49 +0300
committerBogdan Gusiev <agresso@gmail.com>2015-10-05 15:13:04 +0300
commit85a1c025081faf8af8a065e39ee764caebf4054b (patch)
tree64039ea2d163272044d01a96b4ff85c361512fb3 /activerecord/lib/active_record/associations/has_many_association.rb
parent210f33c477e950ad44e66b47da794469ce3b5e64 (diff)
downloadrails-85a1c025081faf8af8a065e39ee764caebf4054b.tar.gz
rails-85a1c025081faf8af8a065e39ee764caebf4054b.tar.bz2
rails-85a1c025081faf8af8a065e39ee764caebf4054b.zip
Make #increment! and #decrement! methods concurency safe
Diffstat (limited to 'activerecord/lib/active_record/associations/has_many_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/has_many_association.rb10
1 files changed, 2 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb
index 7da20d8eea..a9f6aaafef 100644
--- a/activerecord/lib/active_record/associations/has_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_association.rb
@@ -88,21 +88,15 @@ module ActiveRecord
end
def update_counter(difference, reflection = reflection())
- update_counter_in_database(difference, reflection)
- update_counter_in_memory(difference, reflection)
- end
-
- def update_counter_in_database(difference, reflection = reflection())
if reflection.has_cached_counter?
- owner.class.update_counters(owner.id, reflection.counter_cache_column => difference)
+ owner.increment!(reflection.counter_cache_column, difference)
end
end
def update_counter_in_memory(difference, reflection = reflection())
if reflection.counter_must_be_updated_by_has_many?
counter = reflection.counter_cache_column
- owner[counter] ||= 0
- owner[counter] += difference
+ owner.increment(counter, difference)
owner.send(:clear_attribute_change, counter) # eww
end
end