rails devise, no route matches logout

2019-02-08 17:05发布

问题:

Though there're lots of similar questions, i've searched for it for hours but still can not fix it.

Env rails 3.0.9 ruby 1.9.2 devise 1.4.2

I changed the default login url using:

 5   resources :users
 6   devise_for :users, :path => "", :path_names => { :sign_in => 'login', :sign_out  
     => 'logout', :password => 'secret', :confirmation => 'verification', :unlock =>
     'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' }

And the http://localhost:3000/login works fine for me But I include

 = link_to 'sign_out', destroy_user_session_path, :method => :delete

in my application.haml, after i click it, it says that no route matchs "/logout" Why? Please help me.

回答1:

I had a nearly identical problem and thanks to SO fixed it quite easily (link to my question). First, make sure you have <%= javascript_include_tag :defaults %> in your layout file "application.html.erb."

Then, in your config -> initializers -> "devise.rb" file make sure it says:

config.sign_out_via = :delete

and your "sign_out" code destroy_user_session_path, :method => :delete should work.



回答2:

A little late to this party, but here's some help from another answer

Specify your method:

<%= link_to "sign out", destroy_user_session_path, method: :delete %>


回答3:

Set config.sign_out_via = :get in config/initializers/devise.rb to use the following code for your sign out link.

<%= link_to "Sign Out", destroy_user_session_path %>