2011-04-14 5 views
1

しかし、すくい実行すると:そこにあるように思われるルート:RailsのRoutingError:Noルートマッチ{:コントローラは=> "セッション"、:アクションは=> "破壊"}

 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' 

答えて

9

をそれはあなたがいる可能性がありますを渡していない:ルートが一致しない理由は、あなたのルートのidのparam、以来:IDが必要となります。

session DELETE /sessions/:id(.:format) {:action=>"destroy", :controller=>"sessions"} 

注:周りの括弧:フォーマットparamはそれがオプションであることを意味します。

2

これは私がhttp://ruby.railstutorial.org/を実行しているときに実行していたエラーのようで、routes.rbからいくつか残っていたことが判明しました。

match '/signin', :to => 'sessions#new' 
match '/signout', :to => 'sessions#destroy' 

それは、そのグループの最初のルートがすでに存在するため、参照するのは難しいので、私はちょうどグループ(数回)などの上に練りました:リソースルートの追加は、次の2つの追加のルートを伴っていますすでにそこにいる。あなたのケースでレールが

{:controller=>“controller”, :action=>“method”}

として明示的にマップを求めるように見えたとき

+0

_Why_これを追加してルートを修正しますか?それはURLに関するものではありません。 URLを/ signoutXXXに変更すると、それでも成功します。 #destroyXXXに変更すると失敗するので、それは明らかにアクションに関するものです。 _something_が 'セッション#破棄'に行くという単純な事実は、すべての違いを生み出すようですが、単純な「リソース:セッション」はなぜ機能しないのでしょうか? –

-1

resources controllerは方法

{:action=>"method", :controller=>"controller"}

にマップを追加します:controllerがある:action

前これはまた、Noach's質問match '/signout', :to => 'sessions#destroy'が存在している必要があり、なぜあなたは熊手場合、:ルートをあなたはresources sessions

+0

ruby​​ハッシュマップは注文されません。 –

8

によって追加 {:action=>“destroy”, :controller=>“sessions”}がすでに存在している間、それはwell.But理由が少しあると私は同じエラーを得た

{:controller=>“sessions”, :action=>“destroy”}を追加表示されます間違って、ビューのページで私は <%= form_for(:session,url:session_path) do |f| %> 私は 'セッションの最後の'以下を書く。

関連する問題