在Rails上创建博客ruby - 问题删除评论

时间:2010-04-12 03:19:51

标签: ruby-on-rails ruby

正如我总是打字一样,我对轨道和编程很新,所以很容易。提前致谢。

我已成功完成了how to build a weblog in 15 minutes上Ryan Bates的初步教程。如果您不知道本教程将指导您创建帖子并允许对这些帖子发表评论。它甚至通过在帖子show.html.erb页面上创建和显示评论来介绍AJAX。一切都很棒。

这是打嗝,当Ryan带你通过本教程时他会清除comments_controller并只显示创建评论的代码。我试图添加编辑和销毁评论的能力。似乎无法让它工作,不断删除实际的帖子而不是评论(日志显示我一直向PostsController发送DELETE请求)。这是我的代码:

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

2 个答案:

答案 0 :(得分:12)

梅加尔在正确的道路上,但由于这是一条嵌套路线,你必须这样做:

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

所以,你正在传递评论和帖子,并让铁路根据你的定义找出路线。

答案 1 :(得分:1)

_comments.html.erb中,将link_to更改为

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

IE,将comment本身传递给它,而不是整个@comments数组。