设计销毁会话路径与另一个用户路径冲突

时间:2014-11-06 02:14:43

标签: ruby-on-rails devise

我已为我的用户模型设置了设置。

但是,当我尝试调用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

1 个答案:

答案 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。