mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Ensure we are not comparing a string with a symbol in HasManyAssociation#inverse_updates_counter_cache?. Fixes #2755, where a counter cache could be decremented twice as far as it was supposed to be.
This commit is contained in:
parent
9f3e732e65
commit
b24d668859
3 changed files with 12 additions and 2 deletions
|
@ -226,7 +226,7 @@ module ActiveRecord
|
|||
if options[:counter_cache] == true
|
||||
"#{active_record.name.demodulize.underscore.pluralize}_count"
|
||||
elsif options[:counter_cache]
|
||||
options[:counter_cache]
|
||||
options[:counter_cache].to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ require 'models/invoice'
|
|||
require 'models/line_item'
|
||||
require 'models/car'
|
||||
require 'models/bulb'
|
||||
require 'models/engine'
|
||||
|
||||
class HasManyAssociationsTestForCountWithFinderSql < ActiveRecord::TestCase
|
||||
class Invoice < ActiveRecord::Base
|
||||
|
@ -850,6 +851,15 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_clearing_updates_counter_cache_when_inverse_counter_cache_is_a_symbol_with_dependent_destroy
|
||||
car = Car.first
|
||||
car.engines.create!
|
||||
|
||||
assert_difference 'car.reload.engines_count', -1 do
|
||||
car.engines.clear
|
||||
end
|
||||
end
|
||||
|
||||
def test_clearing_a_dependent_association_collection
|
||||
firm = companies(:first_firm)
|
||||
client_id = firm.dependent_clients_of_firm.first.id
|
||||
|
|
|
@ -8,7 +8,7 @@ class Car < ActiveRecord::Base
|
|||
has_one :frickinawesome_bulb, :class_name => "Bulb", :conditions => { :frickinawesome => true }
|
||||
|
||||
has_many :tyres
|
||||
has_many :engines
|
||||
has_many :engines, :dependent => :destroy
|
||||
has_many :wheels, :as => :wheelable
|
||||
|
||||
scope :incl_tyres, includes(:tyres)
|
||||
|
|
Loading…
Reference in a new issue