2010-04-12 11 views
9

Como siempre escribo, soy nuevo en los rieles y la programación en general así que vaya fácil. Gracias por adelantado.Creando un Blog ruby ​​en Rails - Problema Eliminando Comentarios

He seguido con éxito el tutorial inicial de Ryan Bates en how to build a weblog in 15 minutes. Si no sabe, este tutorial lo guiará en la creación de publicaciones y permitirá comentarios sobre esas publicaciones. Incluso introduce AJAX a través de la creación y visualización de comentarios en la página de publicaciones show.html.erb. Todo funciona genial

Aquí está el problema, cuando Ryan lo lleva a través de este tutorial, borra el controlador de comentarios y solo muestra el código para crear comentarios. Estoy tratando de volver a agregar la capacidad de editar y destruir comentarios. Parece que no puede hacer que funcione, sigue eliminando la publicación real, no el comentario (el registro muestra que sigo enviando la solicitud DELETE a PostsController). Aquí está mi código:

class CommentsController < ApplicationController 
def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create!(params[:comment]) 
    respond_to do |format| 
    format.html { redirect_to @post } 
    format.js 
    end 
end 

def destroy 
    @comment = Comment.find(params[:id]) 
    @comment.destroy 

    respond_to do |format| 
     format.html { redirect_to(posts_url) } 
     format.xml { head :ok } 
    end 
    end 
end 

/views/posts/show.html.erb

<%= render :partial => @post %> 

    <p> 
     <%= link_to 'Edit', edit_post_path (@post) %> | 
     <%= link_to 'Destroy', @post, :method => :delete, :confirm => "Are you sure?" %> | 
     <%= link_to 'See All Posts', posts_path %> 
    </p> 

    <h2>Comments</h2> 
    <div id="comments"> 
     <%= render :partial => @post.comments %> 
    </div> 

    <% remote_form_for [@post, Comment.new] do |f| %> 
     <p> 
      <%= f.label :body, "New Comment" %><br/> 
      <%= f.text_area :body %> 
     </p> 
     <p> 

<%= f.submit "Add Comment" %></p> 
<% end %> 

/views/comments/_comment.html.erb

<% div_for comment do %> 
    <p> 
     <strong>Posted <%= time_ago_in_words(comment.created_at) %> ago 
     </strong><br/> 
     <%= h(comment.body) %><br/> 
     <%= link_to 'Destroy', @comments, :method => :delete, :confirm => "Are you sure?" %> 
    </p> 
<% end %> 

routes.rb

ActionController::Routing::Routes.draw do |map| 
    map.resources :posts, :has_many => :comments 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 
end 
+0

"No se puede ver a conseguir que funcione" - ¿qué realidad se trata de solucionarlo? – fig

+0

He intentado cambiar el link_to en el comment.html.erb a @comment, comentario, comentarios, etc. También probé jugar con el CommentsController destruir la acción cambiando el @comment = Comment.find (params [: id]) para incluir @ post.comment.destroy (params [: comment_id]). Un par de otros también, pero parece que o no tengo algo en el archivo routes.rb hecho a la derecha o el link_to en el comments.html.erb es incorrecto. Voy a actualizar para incluir el código de rutas. – bgadoci

Respuesta

12

meagar está en el camino correcto, pero ya que esta es una ruta anidada que tiene que hacer:

<%= link_to 'Destroy', [@post, comment], ... %>

Por lo tanto, están pasando el comentario y el puesto y dejar que los carriles averiguar la ruta basadas en tus definiciones

+0

gracias. Parece que intenté todas las combinaciones pero esto. Funcionó perfectamente – bgadoci

1

En _comments.html.erb, cambie su.210 a

<%= link_to 'Destroy', comment, ... %> 

IE, pasarla a la comment sí mismo, no toda la @comments matriz.

+0

Recibo este error cuando hago eso: método indefinido 'comment_path 'para # bgadoci

Cuestiones relacionadas