rails ActiveRecord trouver dans la console
Quand je suis dans les Rails 3.2 de la console, je peux le faire parfaitement:
p = Person.last
p.last_name
et il imprime le nom de famille.
Mais quand j'ai essayer de le trouver par le id
, il est en mesure de localiser le seul
d'enregistrer et de stocker dans ma variable p
, mais je ne peux pas imprimer le last_name
la colonne. Par exemple:
p = Person.where(id: 34).limit(1)
impression p
montre ici toutes les colonnes, mais p.last_name
dit ce
NoMethodError: undefined method `last_name' for
#<ActiveRecord::Relation:0x000000055f8840>
toute aide serait appréciée.
Vous devez vous connecter pour publier un commentaire.
Un
where
requête renverra unActiveRecord::Relation
, qui agit comme un tableau, même si on limite le nombre d'enregistrements retournés.Si vous au lieu de changer votre requête à:
il va fonctionner comme vous le souhaitez, et arel sait à limiter automatiquement la requête à un résultat unique, de sorte que vous n'avez pas à spécifier explicitement
limit(1)
.Vous pouvez également changer
ou
et il sera de retour un seul enregistrement comme prévu.
EDIT: A si la requête retourne un ActiveRecord::Relation, comme @mu est trop court mentionné dans les commentaires.
Cela renvoie une collection d'active record objets:
Mais il n'y a qu'un avec l'id = 34, c'est donc une collection de 1.
La façon de le faire est:
ou, mieux:
ou, encore mieux:
Ce que vous êtes probablement à la recherche de est
Dans votre cas, la Personne est une classe et elle est héritée de ApplicationRecord
Il retourne simplement le résultat de la requête et non l'objet.
Vous pouvez vérifier à l'aide d'
De sorte que vous ne pouvez pas utiliser p.nom ou p.prenom sur p.