CommentController#destroy中的ActiveRecord :: RecordNotFound

时间:2014-03-28 09:25:22

标签: ruby-on-rails activerecord

我在删除与帖子相关的评论时收到此错误。

//我的CommentsController

def destroy

        @post = Post.find(params[:post_id])

        @comments = @post.comments.find(params[:comment])
        @comments.destroy
        redirect_to post_path(@post)

    end

// my form ::

 <p>
    <strong><%= comment.commenter %>:  </strong>


     <%= comment.body %>
    <strong> at </strong><%= comment.created_at %>

    <%= link_to 'Delete Comments', [comment.post,comment], method: :delete, data: {confirm: 'Are you Sure'} %>
  </p>

我在::

中收到错误

@comments = @ post.comments.find(params [:comment])

请告诉我我错在哪里..

2 个答案:

答案 0 :(得分:3)

你可能应该:

@comment = @post.comments.find(params[:id])
@comment.destroy

因为默认情况下,params[:id]操作中destroy引用了嵌套资源记录ID。

答案 1 :(得分:0)

改为使用

@post = Post.where(:id => params[:post_id]).first
unless @post.blank?
  @comment = @post.comments.where(:id => params[:id]).first
  unless @comment.blank?
    @comment.destroy
    flash[:notice] = "Comment deleted" 
    redirect_to post_path(@post)
  else
    flash[:notice] = "Comment not found"
    redirect_to post_path(@post)
  end
end

findwhere之间的区别在于,如果找不到评论,where会返回一个空数组。但是发现引发ActiveRecord::RecordNotFound错误。清楚吗?如果表中没有id的评论,那么它将返回一个空数组;在第二行中,我添加了一个条件,即如果未找到评论,则不执行destroy操作。我只是处理了这个错误。

您必须在视图文件中包含<%= flash[:notice] %>才能看到错误/成功消息