2010-04-15 7 views
2

Cela peut être une question stupide, mais je commence juste à apprendre Rail c'est pourquoi je pose cette question.Rails modèle appartient au modèle qui appartient au modèle, mais je veux utiliser un autre nom

J'ai un modèle appelé "Utilisateur" qui gère tous les utilisateurs de ma communauté. Maintenant, je veux ajouter un livre d'or à chaque utilisateur. Donc, j'ai créé un modèle appelé « user_guestbook » et inséré cela dans le nouveau modèle:

belongs_to :user 

et ce dans le modèle de l'utilisateur:

has_one :user_guestbook, :as => :guestbook 

La prochaine chose que je l'ai fait était d'ajouter un nouveau modèle gérer les messages à l'intérieur du livre d'or. Je l'ai appelé « guestbook_posts » et a ajouté ce code dans le nouveau modèle:

belongs_to :user_guestbook 

Et cela dans le modèle user_guestbook:

has_many :guestbook_posts, :as => :posts 

Ce que je voulais achive était de pouvoir aller chercher tous les postes à un certain utilisateur par:

@user = User.find(1) 
puts @user.guestbook.posts 

Mais cela ne fonctionne pas pour moi. Je ne sais pas ce que je fais mal et s'il y a un moyen plus facile de le faire s'il vous plaît dites-le moi.

Juste à noter, j'ai créé des migrations pour elle comme suit:

create_user_guestbook:

t.integer :user_id 

create_guestbook_posts:

t.integer :guestbook_id 
    t.integer :from_user 
    t.string :post 

Merci à l'avance!

+0

vous recevez des erreurs? –

+0

Que c'est une méthode non définie – Lisinge

Répondre

3

Je pense qu'il devrait être:

#user 
has_one :guestbook, :class_name => "UserGuestbook" 

#user_guestbook 
belongs_to :user 
has_many :posts, :class_name => "GuestbookPost" 

#guestbook_posts 
belongs_to :user_guestbook 

Pour obtenir tous les messages qui appartiennent à un seul user, vous pouvez ajouter cette ligne au modèle de user

has_many :posts, :through => :guestbook 

Et puis, composez le ceci:

@user.posts 
+0

va essayer ça. merci – Lisinge

+0

Je reçois "ne peut pas convertir la classe en strin" en faisant @user = User.find 1 et puis @ user.guestbook – Lisinge

+2

Le code manqué cité autour de la valeur de 'class_name'. Essayez le code mis à jour. –

Questions connexes