如何删除与帖子相关的评论?

时间:2013-11-19 05:26:41

标签: ruby-on-rails ruby ruby-on-rails-4 slim-lang

我目前正在使用基本的Rails指南来创建博客,但我在删除与帖子相关联的comments时遇到了问题。

这是我的评论控制器:

class CommentsController < ApplicationController
 def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.create(params[:comment].permit(:commenter, :body))
  redirect_to post_path(@post)
 end

 def destroy
  @post = Post.find params[:post_id]
  @comment = @post.comments.find params[:id]
  @comment.destroy
  redirect_to post_path(@post)
 end
end

在我的观点中,destroy行动根本没有触发。所以我甚至无法使用控制台作为解决问题的工具。

以下是comments的部分观点:

 h2 Comments
 - @post.comments.each do |comment|
  p
   strong Commenter:
   = comment.commenter
  p
   strong Comment:
   = comment.body
  p = link_to "Delete Comment", [comment.post, comment],
  method: :delete,
  data: { confirm: 'Are you sure?' }

为删除链接生成html:

<a data-confirm="Are you sure?" data-method="delete" href="/posts/9/comments/2"
rel="nofollow">Delete Comment</a>

即使是我对帖子的摧毁行动也没有提出任何要求,这让我觉得当我搬到偏见时可能会出现问题。

在控制台内部我仍然可以通过查找post_id的帖子来删除评论,然后找到与帖子相关的评论并销毁它。出于某种原因,我无法弄清楚为什么视图链接不会做任何事情。

2 个答案:

答案 0 :(得分:4)

首先,请务必在模板中放置正确的缩进,这可能会弄乱一些事情。带锚链接的最后一段似乎输入错误:

h2 Comments
- @post.comments.each do |comment|
  p
    strong Commenter:
    = comment.commenter
  p
    strong Comment:
    = comment.body
  p 
    = link_to "Delete Comment", [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' }

然后,您应该查看rails服务器日志以查看单击链接时发生的情况。如果HTML链接看起来很好,则必须调用服务器,并提供调试调用所需的所有信息。

答案 1 :(得分:0)

  1. 首先,您使用Post.find(params [:id])检索要删除的帖子。
  2. 第二次,您使用@comment = @ post.comments.where(post_id:@ post.id)检索与您删除的帖子有关的所有注释,其中语句仅检索所有结果,而不是第一次出现。
  3. 最后,您循环这些注释并销毁它们。

    @post = Post.find(params[:id])
    @comment = @post.comments.where(post_id: @post.id) 
    @comment.each do |comment|
        comment.destroy
    end