Rails Verbände (belongs_to, has_many) nicht speichern 2-IDs in der Tabelle mit einer create-Methode (Benutzer, Post, Kommentar)

StackOverflow https://stackoverflow.com/questions/3732198

Frage

Der Versuch, eine grundlegende „Blog-like“ App in Schienen zu schreiben 3, ich bin mit den Verbänden stecken. Ich brauche die Methode speichert die post_id erstellen sowie die user_id in der Kommentartabelle (die ich brauche, um alle Kommentare von einem Benutzer geschrieben, um retrive es anzuzeigen)

Die App haben Benutzer (Authentifizierung - devise), Beiträge (von Nutzern geschrieben - aber ich bin nicht sicher, zählt es in meinem Fall) und Kommentare (an dem Pfosten, die von Nutzern)

.

Kommentar Tabelle hat eine post_id, einen Körper, und auch ein user_id

Verbände:

has_many :comments (In the Post model)
belongs_to :post (In the Comment model)
belongs_to :user (In the Comment model)
has_many :comments (In the User model)

die Strecken:

resources :posts do
  resources :comments
end

resources :users do
  resources :comments
end

Das Kommentar Post-Formular angezeigt auf dem Pfosten zeigt Ansicht: (Beiträge / show.html.erb)

<% form_for [@post, Comment.new] do |f| %>
  <%= f.label :body %>
  <%= f.text_area :body %>
  <%= f.submit %>
<% end %>

und schließlich die create-Methode in den Kommentaren Controller:

A). Wenn ich dies schreibe eine post_id in der Datenbank

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

B). Wenn ich dies schreibe ein user_id geschrieben ...

def create
  @user = current_user
  @comment = @user.comments.create!(params[:comment])
  redirect_to @post
end

Ich habe versucht:

@comment = @post.comments.create!(params[:comment].merge(:user => current_user))

Aber es funktioniert nicht .. Wie kann ich eine Methode schreiben, die die user_id und die post_id retten? Habe ich habe auch einige Veränderungen in der Kommentar Post Form (so etwas wie <% form_for [@post, @user, Comment.new] tun | f |%>?) Zu tun

Danke!

War es hilfreich?

Lösung

etwas sehr ähnliches einzurichten, habe ich das folgende Formular verwendet:

<%= form_for [:place, @comment] do |f| %>
  #form fields here
<%= end %>

Dann im Kommentar Controller:

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:comment])
  @comment.user = User.find(current_user.id)

  respond_to do |format|
  if @comment.save
    format.html { redirect_to(@comment.post, :notice => 'Comment was successfully created.') }
  else
    format.html { render :action => "new" }
  end
end

Ende

Das sollte die Verbände bauen hoffentlich richtig! Nebenbei bemerkt, meinen Sie für Kommentare unter verschachtelt werden: Benutzern in Ihren Routen? Wenn Sie nur alle des Benutzers Kommentare auf einer Profilseite angezeigt werden soll, könnten Sie so etwas wie tun:

<p>
  <b>Comments</b>
  <% if @user.comments.empty? %>
    No comments to display yet...
  <% else %>
    <% @user.comments.each do |comment| %>
      <p>
      <%= link_to "#{comment.post.title}", post_path(comment.post_id) %>, <%= comment.created_at %>
      <%= simple_format comment.content %>
      </p>
    <% end %>
  <% end %>
</p>

Hope einige das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top