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_ujs
在 application.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 它完美地工作
我是 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_ujs
在 application.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 它完美地工作