我在删除与帖子相关的评论时收到此错误。
//我的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])
请告诉我我错在哪里..答案 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
find
和where
之间的区别在于,如果找不到评论,where
会返回一个空数组。但是发现引发ActiveRecord::RecordNotFound
错误。清楚吗?如果表中没有id
的评论,那么它将返回一个空数组;在第二行中,我添加了一个条件,即如果未找到评论,则不执行destroy
操作。我只是处理了这个错误。
您必须在视图文件中包含<%= flash[:notice] %>
才能看到错误/成功消息