【问题标题】:devise destroy session path is conflicting with another user path设计销毁会话路径与另一个用户路径冲突
【发布时间】:2015-01-02 10:31:58
【问题描述】:

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

但是,当我尝试调用销毁会话路径时:

link_to "退出",destroy_user_session_path

但是当我点击链接时,它会将我发送到

.../users/sign_out

我收到以下错误,因为 sign_out 显然不是有效用户:

ActiveRecord::RecordNotFound in UsersController#show

我该如何解决这个问题?我已经尝试过了,但它似乎甚至无法识别它在路线中。

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

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    在您的路由文件中,您已指定此路由应与 DELETE 请求匹配。但是,您的注销链接正在发送 GET 请求。这就是请求匹配 UserControllers#show 的原因。

    假设您使用的是jquery,您可以设置此链接以将注销请求发送为DELETE,方法是确保您已将jquery_ujs 添加到包含的javascript 中。这将修改将data-method 属性设置为“GET”以外的链接的请求方法,要为您的注销link_to 指定正确的:method 参数,请使用:

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

    当然,这只有在您的用户启用了 Javascript 时才有效;否则,请求将回退到GET。如果您想让GET 请求的注销工作,它需要在您的路由文件中具有比显示路由更高的优先级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多