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:
parent
17b09f4fca
commit
9cbf54c81a
3 changed files with 24 additions and 2 deletions
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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] }
|
||||
|
|
Loading…
Reference in a new issue