diff options
author | Bogdan Gusiev <agresso@gmail.com> | 2015-10-03 16:36:49 +0300 |
---|---|---|
committer | Bogdan Gusiev <agresso@gmail.com> | 2015-10-05 15:13:04 +0300 |
commit | 85a1c025081faf8af8a065e39ee764caebf4054b (patch) | |
tree | 64039ea2d163272044d01a96b4ff85c361512fb3 /activerecord/lib/active_record/associations/has_many_association.rb | |
parent | 210f33c477e950ad44e66b47da794469ce3b5e64 (diff) | |
download | rails-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.rb | 10 |
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 |