Rails destroy 不起作用并转发到一个错误 link

Rails destroy does not work and forwards to a wrong link

我是 rails 的新手,并且在最简单的事情上遇到困难。我有以下问题:

当我试图破坏搜索(从我的模型搜索)时,它不起作用,我被重定向到“/search.48(id 为 48 的搜索)。它给了我通知 "We're sorry, but something went wrong."并在控制台中显示 POST。既没有删除搜索,也没有删除 redirect_to search_path。我做错了什么?

这是我的控制器:

def show
    @searches = current_user.searches
end

def destroy
    @search = Search.find(params[:id])
    @search.destroy
    flash[:success] = "Search deleted"
    redirect_to search_path
end

这是我的观点:

<% @searches.each do |search| %> 
<%= search.title %>
<%= search.description %>
<%= button_to "delete", search, method: :destroy %>

我的routes.rb:

get 'search' => 'searches#show'
resources :searches

而且我还在 application.html.erb 以及 //= require jquery 中包含了 <%= javascript_include_tag 'application' %>//= require jquery_ujsapplication.js 文件中。

所以我真的找不到我的错误。有人可以帮助我吗?

在您的视图文件中,按钮的代码应如下所示:

<%= button_to "delete", search, method: :delete %>

注意方法是 :delete,而不是 :destroy。这有点令人困惑,因为 'delete' 是 REST 动词,但 'destroy' 是控制器操作名称。

你试过了吗:

  <%= button_to "Delete", { action: "delete", id: search.id },
                                    method: :delete %>

在你看来。此外,您似乎正在重定向到 search_path,但我猜您想要 searches_path。

我明白了!在我的路由器中,我写了 get 'search' => 'searches#show' 并且不知何故我的控制器与 search_path 混淆了。因为我重命名它以获得 'mysearches' => 'searches#show' 和 mysearches_path 它完美地工作