diff options
author | Neeraj Singh <neerajdotname@gmail.com> | 2013-05-09 13:08:44 -0400 |
---|---|---|
committer | Neeraj Singh <neerajdotname@gmail.com> | 2013-10-14 11:59:59 -0400 |
commit | cd9592959f9f16b228ac3f4bc6fc92932253f8dc (patch) | |
tree | faed0751594dc3790c0a575c96c169c7571fe899 /activerecord/test/models | |
parent | 25649c7fd74219881342b2cb59f97c08f646a4ea (diff) | |
download | rails-cd9592959f9f16b228ac3f4bc6fc92932253f8dc.tar.gz rails-cd9592959f9f16b228ac3f4bc6fc92932253f8dc.tar.bz2 rails-cd9592959f9f16b228ac3f4bc6fc92932253f8dc.zip |
scope_chain should not be mutated for other reflections
Currently `scope_chain` uses same array for building different
`scope_chain` for different associations. During processing
these arrays are sometimes mutated and because of in-place
mutation the changed `scope_chain` impacts other reflections.
Fix is to dup the value before adding to the `scope_chain`.
Fixes #3882.
Diffstat (limited to 'activerecord/test/models')
-rw-r--r-- | activerecord/test/models/cake_designer.rb | 3 | ||||
-rw-r--r-- | activerecord/test/models/chef.rb | 3 | ||||
-rw-r--r-- | activerecord/test/models/department.rb | 4 | ||||
-rw-r--r-- | activerecord/test/models/drink_designer.rb | 3 | ||||
-rw-r--r-- | activerecord/test/models/hotel.rb | 6 |
5 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/test/models/cake_designer.rb b/activerecord/test/models/cake_designer.rb new file mode 100644 index 0000000000..9c57ef573a --- /dev/null +++ b/activerecord/test/models/cake_designer.rb @@ -0,0 +1,3 @@ +class CakeDesigner < ActiveRecord::Base + has_one :chef, as: :employable +end diff --git a/activerecord/test/models/chef.rb b/activerecord/test/models/chef.rb new file mode 100644 index 0000000000..67a4e54f06 --- /dev/null +++ b/activerecord/test/models/chef.rb @@ -0,0 +1,3 @@ +class Chef < ActiveRecord::Base + belongs_to :employable, polymorphic: true +end diff --git a/activerecord/test/models/department.rb b/activerecord/test/models/department.rb new file mode 100644 index 0000000000..08004a0ed3 --- /dev/null +++ b/activerecord/test/models/department.rb @@ -0,0 +1,4 @@ +class Department < ActiveRecord::Base + has_many :chefs + belongs_to :hotel +end diff --git a/activerecord/test/models/drink_designer.rb b/activerecord/test/models/drink_designer.rb new file mode 100644 index 0000000000..2db968ef11 --- /dev/null +++ b/activerecord/test/models/drink_designer.rb @@ -0,0 +1,3 @@ +class DrinkDesigner < ActiveRecord::Base + has_one :chef, as: :employable +end diff --git a/activerecord/test/models/hotel.rb b/activerecord/test/models/hotel.rb new file mode 100644 index 0000000000..b352cd22f3 --- /dev/null +++ b/activerecord/test/models/hotel.rb @@ -0,0 +1,6 @@ +class Hotel < ActiveRecord::Base + has_many :departments + has_many :chefs, through: :departments + has_many :cake_designers, source_type: 'CakeDesigner', source: :employable, through: :chefs + has_many :drink_designers, source_type: 'DrinkDesigner', source: :employable, through: :chefs +end |