1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Check whether the current attribute being read is aliased or not before reading

- If aliased, then use the aliased attribute name.
- Fixes #26417.
This commit is contained in:
Prathamesh Sonpatki 2016-09-16 19:21:56 +05:30
parent 17b09f4fca
commit 9cbf54c81a
No known key found for this signature in database
GPG key ID: 8B90F6B89E2BCB71
3 changed files with 24 additions and 2 deletions

View file

@ -1,3 +1,10 @@
* Fix `read_attribute` method to check whether an attribute is aliased or not, and
use the aliased attribute name if needed.
Fixes #26417.
*Prathamesh Sonpatki*
* PostgreSQL & MySQL: Use big integer as primary key type for new tables
*Jon McCartie*, *Pavel Pravosud*
@ -58,7 +65,7 @@
*Jon Moss*
* Added `stat` method to `ActiveRecord::ConnectionAdapters::ConnectionPool`
* Add `stat` method to `ActiveRecord::ConnectionAdapters::ConnectionPool`.
Example:

View file

@ -48,7 +48,12 @@ module ActiveRecord
# it has been typecast (for example, "2004-12-12" in a date column is cast
# to a date object, like Date.new(2004, 12, 12)).
def read_attribute(attr_name, &block)
name = attr_name.to_s
name = if self.class.attribute_alias?(attr_name)
self.class.attribute_alias(attr_name).to_s
else
attr_name.to_s
end
name = self.class.primary_key if name == "id".freeze
_read_attribute(name, &block)
end

View file

@ -329,6 +329,16 @@ class AttributeMethodsTest < ActiveRecord::TestCase
assert_equal "Don't change the topic", topic[:title]
end
test "read_attribute can read aliased attributes as well" do
topic = Topic.new(title: "Don't change the topic")
assert_equal "Don't change the topic", topic.read_attribute("heading")
assert_equal "Don't change the topic", topic["heading"]
assert_equal "Don't change the topic", topic.read_attribute(:heading)
assert_equal "Don't change the topic", topic[:heading]
end
test "read_attribute raises ActiveModel::MissingAttributeError when the attribute does not exist" do
computer = Computer.select("id").first
assert_raises(ActiveModel::MissingAttributeError) { computer[:developer] }