2013-03-13 1 views
0

J'ai un tableau d'affichage. Un User peut créer un nouveau Discussion. Un User peut également créer un nouveau Post à un Discussion.has_many: à travers

user.rb

has_many :discussions 
has_many :replies, through: :discussions, source: :posts 

Ainsi, un Discussion a beaucoup Posts appartenant à de nombreux Users. Sur ma page show Je veux afficher tous les Posts et leurs Users correspondants. Je sais que je peux obtenir un User's postes avec user.replies. Mais je ne peux pas comprendre comment faire le contraire: obtenir le User si j'ai le Post?

Voici ce que j'ai jusqu'à présent:

<% @posts.each do |post| %> 
    <div class="discussion_right"> 
    <div class="discussion_head"> 
     <% t = post.created_at %> 
     <%= t.strftime("Posted on %b %-d, %Y %l:%M %P") %> 
    </div> 
    <div class="discussion_body"> 
     <%= post.body %> 
    </div> 
    </div> 
    <div class="discussion_left"> 
    <div class="discussion_head"> 
     <%= post.user.first_name %> 
    </div> 
    </div> 
<% end %> 

discussion.rb

belongs_to :user 
has_many :posts 

post.rb

belongs_to :discussion 

évidemment la ligne post.user.first_name ne fonctionne pas ...

Répondre

0

si un utilisateur peut créer un poste, vous devez ajouter un user_id à des postes et ajouter une belongs_to relation

rails g migration add_user_id_to_posts user_id:references 
rake db:migrate 

# post.rb 
belongs_to :user 

alors vous devriez être en mesure d'interroger pour post.user

+0

Voici comment Je crée un nouveau post: '@discussion = current_user.discussions.build (params [: discussion])' mais cela ne fait que définir l'argument de discussion de la publication et non l'id_utilisateur de la publication. Comment puis-je avoir les deux ensemble? (J'utilise 'accept_nested_attributes_for: posts' pour définir les valeurs de Post) – mikeglaz

+0

vous devez passer manuellement le' user_id' au hachage du post ou ajouter un 'hidden_field' pour le' user_id' dans la vue. – jvnill

+0

Si 'has_many: through' me donne des messages pour chaque utilisateur avec la syntaxe user.replies, j'ai l'impression qu'il doit y avoir une connexion de chaque poste à son utilisateur. – mikeglaz