![](/img/trans.png)
[英]Rails Devise Error “No route matches [GET] ”/users/sign_out“”
[英]Unable to sign out in a Rails app, using Devise gem, no route matches /users/sign_out
我知道在不同的站點上有很多關於此問題的問題。 我已經嘗試了很多事情,但仍然無法使用DELETE方法進行鏈接。
我創建了一個空的Rails應用程序
版本:
安裝devise gem之后,我運行了以下命令:
rails generate devise:install
rails generate devise User
我嘗試過的修復方法如下:
初始鏈接:
<%= link_to "Sign out", destroy_user_session_path %>
我添加了delete方法,但沒有刻度:
<%= 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 %>
我在資產/javascripts/application.js中取消了以下注釋:
= require jquery
= require jquery_ujs
我還嘗試使GET鏈接正常工作,從config / initializers / devise.rb更改了這一行
config.sign_out_via = : delete
對此:
config.sign_out_via = :get if Rails.env.test?
不管我嘗試什么,DELETE鏈接都會導致以下結果:
No route matches [GET] "/users/sign_out"
GET鏈接無法正常工作:
沒有路線匹配[GET]“ /”
我當然嘗試過重啟服務器。
耙路包含以下內容:
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
提前致謝。
在devise.rb中
找到config.sign_out_via = :delete
更改為config.sign_out_via = :get
如果使用:get,請確保使用的是:method =:get,如果使用的是:delete,請使用:method =>:delete
在生產中,您可能必須將其交換,因此您應該使用if語句檢查RAILS_ENV
在您的示例中,您可能正在開發模式下運行而不是測試,這就是為什么它可能無法正常工作的原因。
並重新啟動服務器,因為它是初始化程序。
這個助手總是為我工作:
link_to "Logout", destroy_user_session_path, :method => :delete
也許您沒有正確登錄? 您可以檢查if current_user
我們可以看到您的路線文件嗎?
特別是devise_for調用
您也可以嘗試明確設置路徑
devise_for :users, path_names: { sign_out: 'sign_out' }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.