0

私のroutes.rbファイルには次のものがあります。

Hchq::Application.routes.draw do
  resources :users
  resources :sessions, only: [:new, :create, :destroy]

  match '/signup',  to: 'users#new'
  match '/signin',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete
end

実行すると、次のようrake routesになります。

      users GET    /users(.:format)          users#index
            POST   /users(.:format)          users#create
   new_user GET    /users/new(.:format)      users#new
  edit_user GET    /users/:id/edit(.:format) users#edit
       user GET    /users/:id(.:format)      users#show
            PUT    /users/:id(.:format)      users#update
            DELETE /users/:id(.:format)      users#destroy
   sessions POST   /sessions(.:format)       sessions#create
new_session GET    /sessions/new(.:format)   sessions#new
    session DELETE /sessions/:id(.:format)   sessions#destroy
     signup        /signup(.:format)         users#new
     signin        /signin(.:format)         sessions#new
    signout DELETE /signout(.:format)        sessions#destroy

それでも、私が行くとhttp://localhost:3000/signout、次のようになります。

ルーティングエラー:アクションコントローラー例外

私が得るログで:ActionController::RoutingError (No route matches [GET] "/signout"):

/ signoutルートで[GET]の代わりに[DELETE]を使用するべきではありませんか?もしそうなら、どうすれば変更できますか?

4

1 に答える 1

5

ブラウザからそのアドレスに直接移動することで、実際にGETリクエストを実行しています。ブラウザはデフォルトで、ユーザーがURLを入力し、ページをレンダリングするように要求すると、GETリクエストを送信します。

次のように、オプションとしてメソッドを使用#link_toして渡すことにより、ビューにリンクを挿入する必要があります。DELETE

link_to "Signout", signout_path, :method => :delete
于 2012-06-04T19:19:49.547 に答える