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!
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
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.
Dans Rails 5, seul attribute_name = "name"
fonctionne