销毁Ruby on Rails中无法正常工作的路径

时间:2013-09-10 15:34:39

标签: ruby-on-rails ruby-on-rails-3 production-environment

因为我相信它正在使用正确的安静设置而完全难以理解,但我似乎无法删除我的列表。

我有以下内容:

控制器:

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'  

如果有人知道可能导致这种情况的原因,我们将非常感谢任何帮助:)

4 个答案:

答案 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。它过去对我有用。希望它有所帮助。