Ответ 1
Все из них должны работать:
user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)
Лично я бы не использовал send
в этом случае. Когда доступно, предпочитайте public_send
для отправки
Это, наверное, очень простая вещь, но не может найти решение.
У меня есть объект ActiveRecord и вы хотите получить такой атрибут:
attribute_name = "name"
user = User.find(1)
user.get_attribute_by_name(attribute_name) => "John"
Спасибо!
Все из них должны работать:
user[attribute_name]
user.read_attribute(attribute_name)
user.send(attribute_name)
Лично я бы не использовал send
в этом случае. Когда доступно, предпочитайте public_send
для отправки
Вы можете использовать либо []
, либо read_attribute()
, но они не эквивалентны.
Более безопасный метод доступа использует метод [], потому что он вызывает ошибку ActiveModel::MissingAttributeError
, если атрибут не существует. метод read_attribute возвращает nil
, если атрибут не существует.
В Rails 5 просто attribute_name = "name"
работает