2010-04-12 6 views
9

Comme je tape toujours je suis nouveau sur les rails et la programmation en général alors allez-y doucement. Merci d'avance.Création d'un blog ruby ​​on Rails - Problème Suppression Commentaires

J'ai suivi avec succès le tutoriel initial de Ryan Bates au how to build a weblog in 15 minutes. Si vous ne connaissez pas ce didacticiel, il vous permet de créer des publications et d'autoriser les commentaires sur ces publications. Il introduit même AJAX à travers la création et l'affichage des commentaires sur la page posts.html.erb. Tout fonctionne très bien.

Voici le hoquet, quand Ryan vous emmène à travers ce tutoriel, il efface le comments_controller et affiche seulement le code pour créer des commentaires. J'essaie de rajouter la possibilité de modifier et de détruire les commentaires. Ne peut pas sembler l'obtenir au travail, continue à supprimer le post réel pas le commentaire (le journal montre que je continue à envoyer la demande DELETE à PostsController). Voici mon code:

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

"Je ne vois pas comment le faire fonctionner" - qu'avez-vous réellement essayé de résoudre? – fig

+0

J'ai essayé de changer le link_to dans le commentaire.html.erb à @comment, comment, commentaires, etc. J'ai également essayé de jouer avec l'action de destruction de CommentsController en changeant le @comment = Comment.find (params [: id]) pour inclure @ post.comment.destroy (params [: comment_id]). Un couple d'autres aussi bien mais il semble que je n'ai pas quelque chose dans le fichier routes.rb fait correctement ou le link_to dans le comments.html.erb est faux. Je vais mettre à jour pour inclure le code des routes. – bgadoci

Répondre

12

meagar est sur la bonne voie, mais puisque c'est une voie imbriquée que vous devez faire:

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

Alors, vous passez le commentaire et le poste et de laisser des rails comprendre l'itinéraire en fonction sur vos définitions.

+0

merci. On dirait que j'ai essayé toutes les combinaisons, mais cela. Travaillé parfaitement. – bgadoci

1

Dans _comments.html.erb, remplacez votre link_to à

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

IE, transmettre le comment lui-même, et non pas l'ensemble du réseau @comments.

+0

Je reçois cette erreur quand je fais cela: méthode non définie 'comment_path 'pour # bgadoci