2014-11-06 32 views
0

我有設計爲我的用戶模型設置。devise銷燬會話路徑與另一個用戶路徑衝突

然而,當我嘗試調用destroy會話路徑:

的link_to 「退出」,destroy_user_session_path

但是,當我點擊鏈接發送我

.. ./users/sign_out

我得到以下錯誤,因爲sign_out顯然不是有效的用戶:

的ActiveRecord :: RecordNotFound在UsersController#顯示

如何解決此得到什麼?我已經嘗試過,但它似乎甚至沒有認出它是路線。

devise_scope :users do 
    delete "user/signout" => "devise/sessions#destroy", :as => :destroy_session 
end 

回答

1

在你的路由文件,您所指定的這條路線應在DELETE要求相匹配。但是,您的註銷鏈接正在發送GET請求。這就是爲什麼請求匹配UserControllers#show

假設您使用的是jquery,您可以設置此鏈接,通過確保您已將jquery_ujs添加到包含的JavaScript中,將註銷請求發送爲DELETE。這將修改請求方法對於有data-method屬性設置爲「GET」以外的東西聯繫,要爲您signout link_to,用指定正確的:method PARAM:

link_to "Sign out", destroy_user_session_path, method: :delete 

當然,這隻會工作,如果您的用戶啓用了Javascript;否則,請求將回退到GET。如果您想要登錄請求GET,那麼它將需要在路由文件中具有比show route更高的優先級。