2012-04-05 4 views
1

Ich versuche, Kommentare zu einem Beitrag Modell hinzufügenKommentare, dass BELONG_TO Post und BELONG_TO Benutzer

class Comment < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :user #should this be has_one :user instead? 
.... 

Wie richte ich meinen Kommentar neue und Schaffung Aktionen bis sowohl current_user sowie die aktuelle Post zu bekommen?

guides.rubyonrails.org vorgeschlagen

Controller:

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(params[:comment]) 
    redirect_to post_path(@post) 
end 

Ansicht

<%= form_for([@post, @post.comments.build]) do |f| %> 
... 

Allerdings scheint dies nur mit der Post und nicht auch zu assoziieren dem Ziel zu der Benutzer. Wie kann ich beide Verknüpfungen einrichten?

Antwort

6

Ich nehme an, Sie haben eine current_user() Methode irgendwo in Ihrem Controller.

So sollte diese es tun:

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.build(params[:comment]) 
    @comment.user = current_user 
    @comment.save 
    redirect_to post_path(@post) 
end 
+0

Und das Formular sollte wie folgt aufgebaut sein: <% = form_for ([@ post, @ post.comments.build]) do | f | %> und nicht nur <% = form_for (@comment) do | f | %>? – Rapture

+0

Danke! Ich konnte das umsetzen! – Rapture

0

Deradon die Frage gut beantwortet, aber ich ziehe diese Logik innerhalb der neuen Kommentarfunktion zu haben, selbst. Zum Beispiel, anstatt diese Variablen des Aufrufs können Sie haben:

app/views/Kommentare/_form.html.erb:

<%= f.hidden_field :user_id, value: current_user.id %> 
<%= f.hidden_field :post_id, value: @post.id %> 

Dies setzt natürlich, dass Ihre neue Kommentarfunktion innerhalb der ‚Post eingebettet ist Show‘Seite, so dass @post verfügbar ist:

app/views/posts/show.html.erb:

<body> 
    <%= render @post %> 
    <%= render 'comments/_form' %> 
</body> 

Diese post_id hinzufügen und user_ID direkt in den db für einen neuen Kommentar. Vergessen Sie auch nicht, einen Index für diese Fremdschlüssel zu erstellen, damit die Datenbank schneller zugreift. Wenn Sie nicht wissen, wie, google es!

Verwandte Themen