2011-03-29 13 views
5

Me doy cuenta de que esta es probablemente una pregunta muy básica, pero he pasado días volviendo a ella ahora y por alguna razón Google simplemente no me está ayudando. (Creo que parte del problema es que soy un principiante, no estoy seguro de qué preguntar ...) También busqué en Ruby Cookbook de O'Reilly y la API de Rails, pero todavía estoy atascado en este tema . Encontré algo de información sobre las relaciones polimórficas, pero no parecía que fuera eso lo que necesitaba (aunque dígame si estaba equivocado).Pregunta de Easy Ruby on Rails: ¿cómo adjuntar comentarios a usuarios y artículos?

Estoy tratando de modificar Michael Hartl's tutorial para crear una aplicación de blog con usuarios, artículos y comentarios (sin usar andamios). Quiero que los comentarios pertenezcan tanto a un usuario como a un artículo.

Mi problema principal es: No puedo encontrar la forma de obtener la identificación del artículo actual en el controlador de comentarios.

Las relaciones de la clase User:

class User < ActiveRecord::Base 

has_many :articles 
has_many :comments, :dependent => :destroy 

Las relaciones de la clase de artículo:

class Article < ActiveRecord::Base 

belongs_to :user 
has_many :comments, :dependent => :destroy 

Las relaciones de la clase Comentario:

class Comment < ActiveRecord::Base 

belongs_to :user 
belongs_to :article 

Ésta es mi CommentsController (la página about se renderiza en el else solo para hacerlo obvio nos a mí por el momento):

class CommentsController < ApplicationController 
before_filter :authenticate, :only => [:create, :destroy] 

def new 
    @comment = Comment.new 
end 

def create 
    @article = Article.find(params[:id]) 
    @comment = current_user.comments.build(params[:comment]) 
    @comment.article_id = @article.id 
    if @comment.save 
    flash[:success] = "Comment created!" 
    redirect_to '/contact' 
    else 
    render '/about' 
    end 
end 

def destroy 
end 
end 

Cuando registro como usuario y tratar de crear un comentario en un artículo, me sale "No se pudo encontrar el artículo sin un ID." No puedo encontrar la forma de obtener la identificación del artículo actual en el controlador de comentarios.

Gracias y avíseme si necesita que publique más código.

Editar: Aquí está mi _comment_form.html.erb parcial que llamo en la parte inferior de mi vista show.html.erb para el artículo:

<%= form_for ([@article, @article.comments.build]) do |f| %> 
    <div class="field"> 
    <%= f.text_area :content %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Submit" %> 
    </div> 
<% end %> 

También en este caso es el de show.html.erb el artículo:

<heading> 
    <h1><%= @article.heading %></h1> 
    <p>Posted <%= time_ago_in_words(@article.created_at) %> ago by <%= @article.user.name %></p> 
</heading> 
<p><%= @article.content %></p> 
<footer><p> 
    <% unless @article.comments.empty? %> 
    <%= @article.comments.count %> 
    <% end %> comments</p></footer> 
<% unless @article.comments.empty? %> 
    <%= render @comments %> 
    <%= will_paginate @comments %> 
<% end %> 
<%= render 'shared/comment_form' %> 
+0

puede pasar su código, es decir, su vista que tiene forma de crear comentario –

+0

Publique su declaración de formulario de comentario, por favor. – raidfive

+0

Además, para probar mejor sus asociaciones, intente utilizar la consola de Rails. ¡Es un regalo del cielo para tales cosas! –

Respuesta

9

Estoy de acuerdo contigo, polimórfico no es lo que quieres aquí. Creo que tus asociaciones actuales se ven bastante bien.

Supongo que en su routes.rb tiene una configuración como esta. corrígeme si me equivoco:

resources :articles do 
    resources :comments 
end 

Pero si este es el caso, debe cambiar la acción de crear en su CommentsController utilizar params [: article_id] en lugar de [params: id]

@article = Article.find(params[:article_id]) 

Eso debería solucionar el problema donde no puede encontrar un artículo sin una ID

+1

¡Gracias! Eso lo solucionó Increíble, estoy tan feliz! No tengo suficiente reputación para votar tu comentario, pero esta es la respuesta correcta para lo que necesitaba. – Kelly

+0

Sin preocupaciones, me alegro de ayudar :) – DanneManne