aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDiego Carrion <dc.rec1@gmail.com>2015-06-16 13:15:58 -0300
committerDiego Carrion <dc.rec1@gmail.com>2015-06-16 16:12:52 -0300
commitba7377e8176315e7ac6ba1c24b2479925dc37cde (patch)
tree3e6c4e892f9c406fb7fa8763ef389f4708b15643 /activerecord
parente60c18931c81a88f4eb89059e955d6ff07c5e26c (diff)
downloadrails-ba7377e8176315e7ac6ba1c24b2479925dc37cde.tar.gz
rails-ba7377e8176315e7ac6ba1c24b2479925dc37cde.tar.bz2
rails-ba7377e8176315e7ac6ba1c24b2479925dc37cde.zip
raise ActiveModel::MissingAttributeError when trying to access a relationship without the foreign key attribute
fixes regression reported on #20253 ActiveRecord::Base#[] was not used cause of 8b95420
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/associations/belongs_to_association.rb2
-rw-r--r--activerecord/test/cases/associations/belongs_to_associations_test.rb4
2 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/belongs_to_association.rb b/activerecord/lib/active_record/associations/belongs_to_association.rb
index 265a65c4c1..260a0c6a2d 100644
--- a/activerecord/lib/active_record/associations/belongs_to_association.rb
+++ b/activerecord/lib/active_record/associations/belongs_to_association.rb
@@ -107,7 +107,7 @@ module ActiveRecord
end
def stale_state
- result = owner._read_attribute(reflection.foreign_key)
+ result = owner._read_attribute(reflection.foreign_key) { |n| owner.send(:missing_attribute, n, caller) }
result && result.to_s
end
end
diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb
index ba90c61d65..039cc46b0b 100644
--- a/activerecord/test/cases/associations/belongs_to_associations_test.rb
+++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb
@@ -31,6 +31,10 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
assert_equal companies(:first_firm).name, firm.name
end
+ def test_missing_attribute_error_is_raised_when_no_foreign_key_attribute
+ assert_raises(ActiveModel::MissingAttributeError) { Client.select(:id).first.firm }
+ end
+
def test_belongs_to_does_not_use_order_by
ActiveRecord::SQLCounter.clear_log
Client.find(3).firm