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/CHANGELOG.md | |
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/CHANGELOG.md')
-rw-r--r-- | activerecord/CHANGELOG.md | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 278da322f2..e46ca3bd07 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,28 @@ ## Rails 4.0.0 (unreleased) ## +* 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. + + Fixes #4208. + + *Neeraj Singh* + * Run `rake migrate:down` & `rake migrate:up` in transaction if database supports. *Alexander Bondarev* |