5

完全难倒这一点,因为我相信它使用了正确的宁静设置,但我似乎无法删除我的列表。

我有以下内容:

控制器:

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

索引.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'  

如果有人知道可能导致这种情况的任何帮助将不胜感激:)

4

5 回答 5

17

更新了答案。

您的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 被执行。

于 2013-09-10T15:37:03.297 回答
6

查看您的日志输出,该链接正在发送 GET 请求而不是 DELETE 请求。在 Rails 中,链接method: :delete从 GET 请求更改为通过 JavaScript 的 DELETE 请求。

我的预感是,您的 application.js 或 via 中都没有包含 Rails 默认的 jquery javascript 文件= javascript_include_tag :defaults,这将为 Rails 提供 jquery 和 jquery.ujs。

您能否验证 jquery 和 jquery.ujs 是否已通过删除链接加载到您的页面上?

或者,尝试添加= javascript_include_tag :defaults到您的视图/布局并查看链接是否开始工作。

另外,我建议您观看并关注此 Railscasts on Unobtrusive Javascript以获取更多信息。

于 2013-09-10T17:39:51.823 回答
2

尝试链接到 lists_path 而不是 list_path。看看你的路线。

于 2013-09-10T15:39:52.210 回答
2

在您的控制器中,将“销毁方法”中的 @list.destroy 更改为 @list.delete 。过去它对我有用。希望能帮助到你。

于 2016-08-20T21:24:26.030 回答
0

我知道这个问题很老了,但是如果一些初学者正在为删除按钮不起作用而苦苦挣扎。尝试而不是link_to使用button_to它为我修复它

于 2022-01-10T02:22:17.807 回答