aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-12-23 20:31:24 +0000
committerJon Leighton <j@jonathanleighton.com>2011-12-23 20:32:07 +0000
commit4d8ee28841261827c22322e769cb00c4f4fdc3e6 (patch)
treedd636e6ef5cf283edd6cf6f8699a5620dfdb8fcf /activerecord
parenta51c4a314f1721a92864b0484f974bddef894eaa (diff)
downloadrails-4d8ee28841261827c22322e769cb00c4f4fdc3e6.tar.gz
rails-4d8ee28841261827c22322e769cb00c4f4fdc3e6.tar.bz2
rails-4d8ee28841261827c22322e769cb00c4f4fdc3e6.zip
Fix situation where id method didn't get defined causing postgres to fail
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/attribute_methods.rb7
1 files changed, 3 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/attribute_methods.rb b/activerecord/lib/active_record/attribute_methods.rb
index 237343c252..54099d3196 100644
--- a/activerecord/lib/active_record/attribute_methods.rb
+++ b/activerecord/lib/active_record/attribute_methods.rb
@@ -64,7 +64,9 @@ module ActiveRecord
if superclass == Base
super
else
- method_defined_within?(method_name, superclass, superclass.generated_attribute_methods) || super
+ # If B < A and A defines its own attribute method, then we don't want to overwrite that.
+ defined = method_defined_within?(method_name, superclass, superclass.generated_attribute_methods)
+ defined && !ActiveRecord::Base.method_defined?(method_name) || super
end
end
@@ -74,9 +76,6 @@ module ActiveRecord
method_defined_within?(name, Base)
end
- # Note that we could do this via klass.instance_methods(false), but this would require us
- # to maintain a cached Set (for speed) and invalidate it at the correct time, which would
- # be a pain. This implementation is also O(1) while avoiding maintaining a cached Set.
def method_defined_within?(name, klass, sup = klass.superclass)
if klass.method_defined?(name) || klass.private_method_defined?(name)
if sup.method_defined?(name) || sup.private_method_defined?(name)