2012-03-27 26 views
1

我知道在不同網站上有關於此問題的數十個問題。我嘗試了很多東西,但仍然無法使用DELETE方法工作。無法登出Rails應用程序,使用Devise gem,無路線匹配/ users/sign_out

我創建了一個空的Rails應用程序

版本:

  • 色器件2.0.4
  • 導軌:3.2.2
  • 紅寶石:1.9.2
  • RVM:1.10 .3

當我安裝了devise gem後,我跑了這些c ommands:

rails generate devise:install 
rails generate devise User 

修復我已經試過低於:

初始鏈接:

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

我添加了刪除方法,蜱,沒有他們:

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

添加這到application.html.erb:

<%= javascript_include_tag :defaults %> 

我註釋掉的資​​產/ JavaScript的/ application.js中這些行:

= require jquery 
= require jquery_ujs 

我也試圖得到GET環節的工作,從配置/初始化/ devise.rb

config.sign_out_via = : delete 
改變了這一行

這樣:

config.sign_out_via = :get if Rails.env.test? 

無論我怎麼努力,刪除鏈接導致此:

No route matches [GET] "https://stackoverflow.com/users/sign_out" 

GET鏈接不工作,以及:

沒有路由匹配[GET] 「/」

我試圖重新啓動服務器,當然。

耙路線包含此:提前

destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 

感謝。

回答

8

in設計。RB

找到config.sign_out_via = :delete

變化config.sign_out_via = :get

如果你使用:獲得確保您使用的是:方法=:得到,如果你使用的是:刪除使用:方法=>:刪除您的鏈接

生產

你可能要圓掉,所以if語句,你應該使用一個檢查RAILS_ENV

在您的例子你可能在開發模式下運行,而不是測試,這就是爲什麼它是p&無法工作。

並重新啓動您的服務器,因爲它是一個初始化程序。

+0

直簡單的答案。我已經找到了Heroku:GET,並使得代碼在生產(Heroku)上中斷,所以不必將其更改爲':get',而必須將它們設置爲可以處理這兩個請求的列表,然後使用'config .sign_out_via =:刪除,:get',併爲我工作。 – 2016-10-13 12:42:30

2

這個幫手總是對我的作品:

link_to "Logout", destroy_user_session_path, :method => :delete 

也許你是不是在正確記錄?你可以用if current_user

+0

我已登錄,註銷鏈接僅在user_signed_in時顯示?是真的。 – afaf12 2012-03-27 23:01:40

0

我們可以看到你的路線文件嗎?

具體的devise_for呼叫

您也可以嘗試設置路徑明確

devise_for :users, path_names: { sign_out: 'sign_out' }

相關問題