[英]Rails Devise Error “No route matches [GET] ”/users/sign_out“”
[英]Rails 3 with Devise: No route matches /d/users/sign_out
當我嘗試退出設計錯誤時,我收到以下錯誤:
沒有路線匹配[GET]“/ d / users / sign_out”
我的標簽是正確的,如下:
<%= link_to "Sign Out", destroy_session_path, :method=>:delete %>
我的設計路線是:
devise_for :users, :path_prefix=>"d", :controllers=>{:sessions=>"sessions"}
其他路線是:
resources :users#For CRUD defined after devise_for like in Devise Wiki
使用自定義控制器會話進行ajax登錄,例如在Devise wiki頁面上:
class SessionsController < Devise::SessionsController
def create
respond_to do |format|
format.html{ super }
format.json do
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
#resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
return sign_in_and_redirect(resource_name, resource)
end
end
end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end
def failure
return render:json => {:success => false, :errors => ["Login failed."]}
end
end
設計初始化程序具有:
config.sign_out_via = :delete
關於什么可能導致問題的任何想法? 我搜索了谷歌,但仍然感到難過。
以下是設計用戶的rails路徑文件的屏幕截圖。 抱歉,它很小,但你可以右鍵單擊然后自己查看它以獲得更大的屏幕。
包含jquery_ujs文件。
它在控制台中顯示刪除確實正在傳遞,但是它從sessions_controller跳轉到/然后轉到d / users / sign_out ...不確定如何解決這個問題。
重定向時,首先將d / users / sign_out作為DELETE傳遞給它。 然后重定向到root_url
,然后給出錯誤ERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine.
然后它嘗試重定向到d / users / sign_out作為GET失敗的地方。
這似乎是Devise和Ruby 1.9.2-p290之間的問題。 更新到Ruby 1.9.3並運行bundle update
以確保使用最新版本的Devise; 似乎工作。
聽起來你可能已經從application.js文件中刪除了//= require jquery_ujs
。 我認為處理鏈接細節以發出“刪除”請求。 無論哪種方式,就像現在一樣,你正在做一個'GET',顯然不會命中你的destroy_user_session
方法。
更改:
config.sign_out_via = :delete
至:
config.sign_out_via = :get
看到這個相關:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.