méthode non pour ActiveRecord::Relation
Utilisateur modèle
class User < ActiveRecord::Base
has_many :medicalhistory
end
Mdedicalhistory modèle
class Medicalhistory < ActiveRecord::Base
belongs_to :user #foreign key -> user_id
accepts_nested_attributes_for :user
end
Erreur
undefined method `lastname' for #<ActiveRecord::Relation:0xb6ad89d0>
#this works
@medicalhistory = Medicalhistory.find(current_user.id)
print "\n" + @medicalhistory.lastname
#this doesn't!
@medicalhistory = Medicalhistory.where("user_id = ?", current_user.id)
print "\n" + @medicalhistory.lastname #error on this line
- ce message d'erreur?
- Ne
@medicalhistory.first.lastname
travail? - 🙁 oui, c'est....insight?
- vous ne savez pas si c'est les "meilleures pratiques", mais @medicalhistory = Medicalhistory.où("user_id = ?", current_user.id)[0] devrait fonctionner
Vous devez vous connecter pour publier un commentaire.
Bien, vous obtenez en retour un objet de
ActiveRecord::Relation
, pas votre modèle d'instance, et donc l'erreur, puisqu'il n'existe pas de méthode appeléelastname
dansActiveRecord::Relation
.Faire
@medicalhistory.first.lastname
fonctionne parce que@medicalhistory.first
est de retour de la première instance du modèle qui a été trouvé par lewhere
.Aussi, vous pouvez imprimer
@medicalhistory.class
pour le travail et "erroring" code et de voir comment ils sont différents.first
méthode lorsque l'on regarde l'API.Une autre chose à noter,
:medicalhistory
devrait être au pluriel car c'est unhas_many
relationDe sorte que votre code:
Devrait être écrit:
Des Rails docs (trouvé ici)
C'est parce que les rails déduit automatiquement le nom de la classe à partir de l'association nom.
Si un utilisateur n'
had_one
medicalhistory
ce serait singulier que vous aviez écrit:Je sais que vous avez déjà accepté une réponse, mais pensé que ce serait aider à réduire les erreurs et de confusion.