web-dev-qa-db-fra.com

obtenir l'attribut de l'objet ActiveRecord par chaîne

C'est probablement une chose très simple mais je ne trouve pas de solution.

J'ai un objet ActiveRecord et je veux un attribut comme celui-ci:

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

Merci!

30
Kieran Klaassen

Tout cela devrait fonctionner:

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

Personnellement, je n’utiliserais pas send dans ce cas. Lorsque disponible, préférez envoyer public_send

65
Frederick Cheung

Vous pouvez utiliser [] ou read_attribute() mais ils ne sont pas équivalents . La méthode d'accès la plus sûre utilise la méthode [] car elle déclenche une erreur ActiveModel::MissingAttributeError si l'attribut n'existe pas. La méthode read_attribute renvoie nil si l'attribut n'existe pas. 

1
Brent Matzelle

Dans Rails 5, seul attribute_name = "name" fonctionne

0
Kaz