Подтвердить что ты не робот

Получить атрибут объекта ActiveRecord по строке

Это, наверное, очень простая вещь, но не может найти решение.

У меня есть объект ActiveRecord и вы хотите получить такой атрибут:

attribute_name = "name"
user = User.find(1)
user.get_attribute_by_name(attribute_name) => "John"

Спасибо!

4b9b3361

Ответ 1

Все из них должны работать:

user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)

Лично я бы не использовал send в этом случае. Когда доступно, предпочитайте public_send для отправки

Ответ 2

Вы можете использовать либо [], либо read_attribute(), но они не эквивалентны.  Более безопасный метод доступа использует метод [], потому что он вызывает ошибку ActiveModel::MissingAttributeError, если атрибут не существует. метод read_attribute возвращает nil, если атрибут не существует.

Ответ 3

В Rails 5 просто attribute_name = "name" работает