diff options
author | Neeraj Singh <neerajdotname@gmail.com> | 2013-04-13 21:19:17 -0400 |
---|---|---|
committer | Neeraj Singh <neerajdotname@gmail.com> | 2013-04-19 14:09:16 -0400 |
commit | 66001f360661fefad89d9e271b9ff75a86b4b886 (patch) | |
tree | 838c9686ec081959b7e6f9b007f290212d3bad25 /activerecord/test | |
parent | 08c6df8532a1884050c8e9087e9fce9df6528ae2 (diff) | |
download | rails-66001f360661fefad89d9e271b9ff75a86b4b886.tar.gz rails-66001f360661fefad89d9e271b9ff75a86b4b886.tar.bz2 rails-66001f360661fefad89d9e271b9ff75a86b4b886.zip |
fix respond_to? for non selected column
fixes #4208
If a query selects only a few columns and gives custom names to
those columns then respond_to? was returning true for the non
selected columns. However calling those non selected columns
raises exception.
post = Post.select("'title' as post_title").first
In the above case when `post.body` is invoked then an exception is
raised since `body` attribute is not selected. Howevere `respond_to?`
did not behave correctly.
pos.respond_to?(:body) #=> true
Reason was that Active Record calls `super` to pass the call to
Active Model and all the columns are defined on Active Model.
Fix is to actually check if the data returned from the db contains
the data for column in question.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/relation_test.rb | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/activerecord/test/cases/relation_test.rb b/activerecord/test/cases/relation_test.rb index 34ecdb3cc9..06723b9d7f 100644 --- a/activerecord/test/cases/relation_test.rb +++ b/activerecord/test/cases/relation_test.rb @@ -185,6 +185,11 @@ module ActiveRecord assert_equal 3, authors(:david).posts.merge(posts_with_special_comments_with_ratings).count.length end + def test_respond_to_for_non_selected_element + post = Post.select("'title' as post_title").first + assert !post.respond_to?(:body), "post should not respond_to?(:body) since invoking it raises exception" + end + end class RelationMutationTest < ActiveSupport::TestCase |