Rails RoutingError:没有匹配{:controller =>“ sessions”,:action =>“ destroy”}的路由

问题描述

| 但是,当运行rake:routes时,它似乎在那里:
     users GET    /users(.:format)          {:action=>\"index\",:controller=>\"users\"}
            POST   /users(.:format)          {:action=>\"create\",:controller=>\"users\"}
   new_user GET    /users/new(.:format)      {:action=>\"new\",:controller=>\"users\"}
  edit_user GET    /users/:id/edit(.:format) {:action=>\"edit\",:controller=>\"users\"}
       user GET    /users/:id(.:format)      {:action=>\"show\",:controller=>\"users\"}
            PUT    /users/:id(.:format)      {:action=>\"update\",:controller=>\"users\"}
            DELETE /users/:id(.:format)      {:action=>\"destroy\",:controller=>\"users\"}
   sessions POST   /sessions(.:format)       {:action=>\"create\",:controller=>\"sessions\"}
new_session GET    /sessions/new(.:format)   {:action=>\"new\",:controller=>\"sessions\"}
    session DELETE /sessions/:id(.:format)   {:action=>\"destroy\",:controller=>\"sessions\"}
     signup        /signup(.:format)         {:controller=>\"users\",:action=>\"new\"}
    contact        /contact(.:format)        {:controller=>\"pages\",:action=>\"contact\"}
      about        /about(.:format)          {:controller=>\"pages\",:action=>\"about\"}
       help        /help(.:format)           {:controller=>\"pages\",:action=>\"help\"}
       root        /(.:format)               {:controller=>\"pages\",:action=>\"home\"}

Here are the routes from routes.rb:

  resources :users
  resources :sessions,:only => [:new,:create,:destroy]


  match \'/signup\',to: \'users#new\'
  match \'/contact\',to: \'pages#contact\'
  match \'/about\',to: \'pages#about\'
  match \'/help\',to: \'pages#help\'
    

解决方法

您可能没有在路由中传递:id参数,这就是路由不匹配的原因,因为:id是必需的:
session DELETE /sessions/:id(.:format)   {:action=>\"destroy\",:controller=>\"sessions\"}
注意::format参数的括号表示它是可选的。     ,我也遇到了同样的错误,但是原因是我在视图页面中写的小错误      
<%= form_for(:session,url:session_path) do |f| %>
  我减去了“会话”中的最后一个“ \”。     ,这看起来像是我在通过http://ruby.railstutorial.org/运行时遇到的错误,结果发现我在route.rb中遗漏了一些东西。资源路由的添加伴随以下两个附加路由:
match \'/signin\',:to => \'sessions#new\'
match \'/signout\',:to => \'sessions#destroy\'
很难看到,因为该组中的第一条路线已经存在,所以我刚刚(多次)对该组进行了掩饰。     ,
resources controller
将地图添加到方法
{:action=>\"method\",:controller=>\"controller\"}
在您的情况下,铁轨似乎明确要求地图为
{:controller=>“controller”,:action=>“method”}
:controller
:action
之前 这也回答了Noach的问题,为什么ѭ9必须存在,如果您耙:routes,您会看到它已添加
{:controller=>“sessions”,:action=>“destroy”}
{:action=>“destroy”,:controller=>“sessions”}
resources sessions
添加