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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top