Rails: se référant à nouveau à modéliser l'objet appartient à
-
19-09-2019 - |
Question
Ceci est probablement une question stupide, mais je ne peux pas sembler trouver une bonne réponse. Je veux connaître la meilleure façon de se référer au modèle qu'un objet appartient.
Par exemple:
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :users
end
Alors, pour obtenir les messages de l'utilisateur, je peux utiliser user.posts, mais pour obtenir l'utilisateur du poste, je ne peux pas faire l'inverse: post.user
Si j'ajoute une méthode « utilisateur » au modèle Post, cela fonctionne, mais il ne semble pas être la meilleure façon.
class Post < ActiveRecord::Base
belongs_to :users
def user
User.find(self.user_id)
end
end
Si vous regardez ce blog http: //www.fortytwo .gr / blog / 18 / vous pouvez voir 9 eSSENTIELLES Rails-Conseils par exemple, que l'auteur utilise post.user.username, qui ne fonctionne pas hors de la boîte, ainsi que: include = > [: user], ce qui ne fonctionne pas non plus, même avec la méthode "utilisateur" dans le modèle post
.Je sais que c'est rudimentaire, donc merci de votre patience. Je veux juste savoir la meilleure façon d'accomplir cette relation.
Mon objectif principal est d'écrire « trouve » en utilisant imbriquée comprend, qui se réfèrent à l'utilisateur comme ceci:
post = Post.find (: tout: inclure => [: mode])
Quand j'essaie, je reçois « ActiveRecord :: ConfigurationError: Association du nom « utilisateur » n'a pas été trouvé, peut-être vous avez mal orthographié il? »
Merci beaucoup.
La solution
Je suis un peu nouveau pour Rails, mais cela devrait fonctionner automatiquement ...
Ah - vous avez nommé la classe parente dans Post belongs_to :users
; mais parce qu'il appartient uniquement à un seul utilisateur, Rails ATTEND belongs_to :user
(ou, bien sûr, belongs_to :users, :class_name => "User"
).
C'est:
class Post < ActiveRecord::Base
belongs_to :user
end
devrait faire le travail.
Autres conseils
Appartient à un modèle devrait être au singulier. comme
belongs_to :user