因为我相信它正在使用正确的安静设置而完全难以理解,但我似乎无法删除我的列表。
我有以下内容:
控制器:
def destroy
@list = List.find(params[:id])
@list.destroy
redirect_to lists_path
end
#37 def show
#38 @list = List.find(params[:id])
#39 end
Index.html.haml
- @list.each do |list|
...
= link_to "Delete", list_path(list), method: :delete, data: { confirm: 'Are you certain you want to delete this?' }
...
路线:
ListApp::Application.routes.draw do
devise_for :users
resources :lists
正在给出正确的rake路线输出:
lists GET /lists(.:format) lists#index
POST /lists(.:format) lists#create
new_list GET /lists/new(.:format) lists#new
edit_list GET /lists/:id/edit(.:format) lists#edit
list GET /lists/:id(.:format) lists#show
PATCH /lists/:id(.:format) lists#update
PUT /lists/:id(.:format) lists#update
DELETE /lists/:id(.:format) lists#destroy
但是在生产环境中运行时,我仍然会收到以下错误。
I, [2013-09-10T15:27:40.338022 #453] INFO -- : Started GET "/lists/2" for 81.159.35.212 at 2013-09-10 15:27:40 +0000
I, [2013-09-10T15:27:40.340626 #453] INFO -- : Processing by ListsController#show as HTML
I, [2013-09-10T15:27:40.340867 #453] INFO -- : Parameters: {"id"=>"2"}
I, [2013-09-10T15:27:40.354092 #453] INFO -- : Completed 500 Internal Server Error in 13ms
F, [2013-09-10T15:27:40.359807 #453] FATAL -- :
NameError (undefined local variable or method `list' for #<ListsController:0x000000050a7c38>):
app/controllers/lists_controller.rb:38:in `show'
如果有人知道可能导致这种情况的原因,我们将非常感谢任何帮助:)
答案 0 :(得分:16)
更新了答案。
您的link_to
声明看起来不错:
= link_to "Delete", list_path(list), method: :delete, data: { confirm: 'Are you certain you want to delete this?' }
您的布局文件中可能没有必要的javascript:
# app/views/layouts/application.html.haml
%head
= javascript_include_tag "application"
= csrf_meta_tag %>
这就是list_path
无法执行destroy
操作并尝试执行show
操作的原因。
如果这不起作用,那么问题在于阻止javascript被执行的其他地方。
答案 1 :(得分:6)
查看您的日志输出,该链接正在发送GET请求而不是DELETE请求。在rails中,method: :delete
的链接通过JavaScript从GET请求更改为DELETE请求。
我的预感是你没有在你的application.js中或通过= javascript_include_tag :defaults
包含Rails默认的jquery javascript文件,这将为你获取Rails的jquery和jquery.ujs。
你能用你的删除链接验证你的页面上是否加载了jquery和jquery.ujs?
或者,尝试将= javascript_include_tag :defaults
添加到您的视图/布局中,看看该链接是否开始有效。
此外,我建议您观看并关注this Railscasts on Unobtrusive Javascript以获取更多信息。
答案 2 :(得分:2)
尝试链接到lists_path而不是list_path。看看你的路线。
答案 3 :(得分:2)
在你的控制器中,将'destroy方法'中的@ list.destroy更改为@ list.delete。它过去对我有用。希望它有所帮助。