aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/core.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2016-05-31 11:35:46 -0400
committerSean Griffin <sean@seantheprogrammer.com>2016-05-31 11:38:10 -0400
commitc8be4574a2a35c896560ff58b26111ad6dd9d60f (patch)
tree86cb1cab0a6f4bf2b4e49bf28aec76340634aa86 /activerecord/lib/active_record/core.rb
parent81251c6d99eda71d8c8d748cfd3710242aece142 (diff)
downloadrails-c8be4574a2a35c896560ff58b26111ad6dd9d60f.tar.gz
rails-c8be4574a2a35c896560ff58b26111ad6dd9d60f.tar.bz2
rails-c8be4574a2a35c896560ff58b26111ad6dd9d60f.zip
`ActiveRecord::Base#hash` should differ between classes
Prior to this change, we would get collisions if Active Record objects of different classes with the same ID were used as keys of the same hash. It bothers me slightly that we have to allocate inside of this method, but Ruby doesn't provide any way to hash multiple values without allocation
Diffstat (limited to 'activerecord/lib/active_record/core.rb')
-rw-r--r--activerecord/lib/active_record/core.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index f936e865e4..d45ca9b24b 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -432,7 +432,7 @@ module ActiveRecord
# [ Person.find(1), Person.find(2), Person.find(3) ] & [ Person.find(1), Person.find(4) ] # => [ Person.find(1) ]
def hash
if id
- id.hash
+ [self.class, id].hash
else
super
end