mirror of
https://github.com/github/rails.git
synced 2026-01-09 14:48:01 -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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user