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
|
if options[:counter_cache] == true
|
||||||
"#{active_record.name.demodulize.underscore.pluralize}_count"
|
"#{active_record.name.demodulize.underscore.pluralize}_count"
|
||||||
elsif options[:counter_cache]
|
elsif options[:counter_cache]
|
||||||
options[:counter_cache]
|
options[:counter_cache].to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ require 'models/invoice'
|
||||||
require 'models/line_item'
|
require 'models/line_item'
|
||||||
require 'models/car'
|
require 'models/car'
|
||||||
require 'models/bulb'
|
require 'models/bulb'
|
||||||
|
require 'models/engine'
|
||||||
|
|
||||||
class HasManyAssociationsTestForCountWithFinderSql < ActiveRecord::TestCase
|
class HasManyAssociationsTestForCountWithFinderSql < ActiveRecord::TestCase
|
||||||
class Invoice < ActiveRecord::Base
|
class Invoice < ActiveRecord::Base
|
||||||
|
@ -850,6 +851,15 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
|
||||||
end
|
end
|
||||||
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
|
def test_clearing_a_dependent_association_collection
|
||||||
firm = companies(:first_firm)
|
firm = companies(:first_firm)
|
||||||
client_id = firm.dependent_clients_of_firm.first.id
|
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_one :frickinawesome_bulb, :class_name => "Bulb", :conditions => { :frickinawesome => true }
|
||||||
|
|
||||||
has_many :tyres
|
has_many :tyres
|
||||||
has_many :engines
|
has_many :engines, :dependent => :destroy
|
||||||
has_many :wheels, :as => :wheelable
|
has_many :wheels, :as => :wheelable
|
||||||
|
|
||||||
scope :incl_tyres, includes(:tyres)
|
scope :incl_tyres, includes(:tyres)
|
||||||
|
|
Loading…
Reference in a new issue