我已为我的用户模型设置了设置。
但是,当我尝试调用destroy会话路径时:
link_to“退出”,destroy_user_session_path
但是当我点击链接时,它会将我发送给
... /用户/ SIGN_OUT
我收到以下错误,因为sign_out显然不是有效用户:
UsersController中的ActiveRecord :: RecordNotFound#show
我如何解决这个问题?我试过这个,但它似乎甚至没有认识到这是路线。
devise_scope :users do
delete "user/signout" => "devise/sessions#destroy", :as => :destroy_session
end
答案 0 :(得分:2)
在您的路线文件中,您已指定此路线应与DELETE
请求匹配。但是,您的退出链接正在发送GET
请求。这就是请求匹配UserControllers#show
。
假设您正在使用jquery
,则可以设置此链接,以确认您已将DELETE
添加到jquery_ujs
,以{}发送请求JavaScript的。这将修改data-method
属性设置为' GET'以外的其他链接的请求方法,为您的注销:method
指定正确的link_to
参数,使用方法:
link_to "Sign out", destroy_user_session_path, method: :delete
当然,这仅在您的用户启用了Javascript时才有效;否则,请求将回退到GET
。如果您要为GET
请求进行注销工作,则路由文件中的优先级必须高于show route。