Rails Associazioni (belongs_to, has_many) non può salvare 2 ids in tabella con un metodo create (utente, posta, commentare)

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

Domanda

Il tentativo di scrivere un semplice "blog-like" app in Rails 3, mi sono bloccato con le associazioni. Ho bisogno del metodo create Salva la post_id così come l'id_utente nella tabella di commento (di cui ho bisogno per retrive tutti i commenti scritti da un utente al fine di visualizzarlo)

L'applicazione ha degli utenti (autenticazione - Definire), i messaggi (inviati dagli utenti - ma non sono sicuro che è importante nel mio caso) e commenti (sui messaggi, inviati dagli utenti)

.

la tabella di commento ha un post_id, un corpo, e anche un user_id

Associazioni:

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)

i percorsi:

resources :posts do
  resources :comments
end

resources :users do
  resources :comments
end

Il commento forma posta visualizzato sui messaggi Mostra Visualizzazione: (messaggi / show.html.erb)

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

e, infine, il metodo nel controller commenti creare:

A.) Se scrivo questo un post_id è scritto nel database

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

B). Se scrivo questo un user_id è scritto ...

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

ho provato:

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

Ma non funziona .. Come posso scrivere un metodo che salvare l'user_id e il post_id? Avevo anche fare un certo cambiamento nella forma commento postale (qualcosa come <% form_for [@post, @user, Comment.new] do | f |%>?)

Grazie!

È stato utile?

Soluzione

Per impostare qualcosa di molto simile, ho usato il seguente modulo:

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

Poi nel controller commenti:

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

end

Questo dovrebbe costruire le associazioni correttamente si spera! Proprio come un a parte, cosa si intende per i commenti per essere nidificati sotto: gli utenti nei tuoi percorsi? Se si desidera solo per visualizzare tutti i commenti degli utenti su una pagina di profilo, si potrebbe fare qualcosa di simile:

<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>

La speranza alcuni di che aiuta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top