删除评论结果为未定义的方法“comment_path”?

Deleting comments result as undefined method `comment_path'?

当我试图删除评论时,评论并没有从数据库中删除,而且还有一个错误未定义的方法`comment_path'...

_comment.html.erb

 <% if current_user?(comment.user) %>
   <%= link_to "delete", comment, method: :delete %>
 <% end %>

comments_controller.rb

 def destroy
   @comment.destroy
   flash[:success] = "Micropost deleted"
   redirect_to request.referrer || root_url
 end

microposts_controller.rb

 def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    @comments = @micropost.comments
 end

routes.rb

 resources :microposts do
    resources :comments
 end
link_to(
  "delete",
  microposts_comment_path(comment.micropost, comment),
  method: :delete
)

link_to(
  'Delete Comment',
  [comment.micropost, comment],
  method: :delete,
  data: { confirm: 'Are you sure?' }
)

您的 comments 嵌套在 microposts 的范围内。

要使其正常工作,您必须在锚标签中提供微博。

示例:

link_to "Delete Comment", [comment.micropost, comment], method: :delete

# OR

link_to "Delete Comment", microposts_comment_path(comment.micropost, comment), method: :delete

由于您有嵌套资源,您必须执行以下操作:

1.In 您的控制器:

# DELETE /microposts/:micropost_id/comments/1
def destroy
  #1st you retrieve the micropost thanks to params[:micropost_id]
  micropost = Micropost.find(params[:micropost_id])
  #2nd you retrieve the comment thanks to params[:id]
  @comment = micropost.comments.find(params[:id])
  @comment.destroy

  flash[:success] = "Micropost deleted"
  redirect_to request.referrer || root_url
end

2.In您的观点,替换

<%= link_to "delete", comment, method: :delete %>

与:

<%= link_to "delete", [comment.micropost, comment], method: :delete %>