2010-01-06 6 views
6

Ceci est probablement une question stupide, mais je n'arrive pas à trouver une bonne réponse. Je veux connaître la meilleure façon de me référer au modèle auquel appartient un objet.Rails: En revenant au modèle auquel appartient l'objet

Par exemple:

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :users 
end 

Donc, 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 "user" au modèle Post, ça marche, mais ça ne semble pas être le meilleur moyen.

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/9-Essential-Rails-Tips à titre d'exemple, vous pouvez voir que l'auteur utilise post.user.username, qui ne fonctionne pas hors de la boîte, ainsi que: include => [: user], qui ne fonctionne pas, même avec la méthode "user" dans le modèle Post. Je sais que c'est rudimentaire, alors merci pour 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: include => [: user])

Lorsque j'essaie ceci, j'obtiens "ActiveRecord :: ConfigurationError: l'association nommée" utilisateur "n'a pas été trouvée, peut-être que vous l'avez mal orthographiée?"

Merci beaucoup.

Répondre

8

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 n'appartient qu'à 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.

+0

Merci. C'est officiellement la question la plus stupide que j'ai jamais posée. Je ne peux pas croire que je n'ai pas vu ça. Je me demande pourquoi cela fonctionne même si vous le faites pluriel ... – Shagymoe

0

Appartient à un modèle doit être au singulier. comme

belongs_to :user 
Questions connexes