Excepție Controller de acțiune: Folosind GET în loc de DELETE

Am urmatoarele fisiere:

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

Când rulez rute rake primesc:

      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

și totuși, atunci când merg la http://localhost: 3000/signout primesc următoarele:

routing error: Action Controller Exception

In the log I get: ActionController::RoutingError (No route matches [GET] "/signout"):

Care, nu ar trebui să am un [DELETE] în loc de [GET] pe ruta/signout? Dacă da, cum îl schimb?

0

1 răspunsuri

Navigând direct de la browserul dvs. la acea adresă, de fapt, efectuați o solicitare GET. În mod implicit, browserele trimit solicitări GET când un utilizator introduce o adresă URL și îi cere să redacteze pagina.

Ar trebui să inserați un link în vizualizarea dvs. utilizând #link_to și să parcurgeți metoda DELETE ca opțiune, cum ar fi:

link_to "Signout", signout_path, :method => :delete
0
adăugat
Minunat! Ar fi trebuit să mă gândesc la asta.
adăugat autor Noah Clark, sursa
Da. Dacă citiți fundalul (consultați guides.rubyonrails.org/form_helpers.html), majoritatea browserelor nu acceptă nimic altceva decât GET și POST, astfel încât Rails îl falsifică cu o intrare ascunsă denumită "method".
adăugat autor railsdog, sursa