没有路线匹配 [GET] "/users/sign_out" rails 5

Posted

技术标签:

【中文标题】没有路线匹配 [GET] "/users/sign_out" rails 5【英文标题】:No route matches [GET] "/users/sign_out" rails 5 【发布时间】:2017-08-03 20:09:55 【问题描述】:

当我尝试退出时,我收到 No route matches [GET] "/users/sign_out" 错误。 这是我的退出链接标签。

 <%= link_to "Sign Out", destroy_user_session_path, method: :get , class:  "nav-link"  %>

以下是与我的用户模型和设计相关的路线:

Rails.application.routes.draw do
  devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end

  root 'books#index'
  resources :books do

    member do
      put "like", to: "books#upvote"
    end

  end
end

这是我的 devise.rb

config.sign_out_via = :get

【问题讨论】:

【参考方案1】:

routes.rb

中尝试以下操作
devise_for :users
devise_scope :user do
  get '/users/sign_out' => 'devise/sessions#destroy'
end

更多信息how to by devise

【讨论】:

我必须定义新方法,destroy_user_session_with_get ?? 不...您已经定义的那个。只需添加一个别名 >>> ,如: 'destroy_user_session_with_get' 现在我收到错误 undefined local variable or method `destroy_user_session_via_get_path' in '' @FedeSc 我会为你分解它 -> 在你的 routes.rb 中写 get '/users/sign_out' =&gt; 'devise/sessions#destroy', as: 'destroy_user_session_via_get' 而不是你写的。并考虑写&lt;%= link_to "Sign Out", destroy_user_session_via_get_path, method: :get , class: "nav-link" %&gt; 编辑:给出更多的润色以使其更易于理解 我还是照你说的做了未定义的局部变量或方法`destroy_user_session_via_get_path【参考方案2】:

如果您打算保留注销/users/sign_out 的默认路由路径,则不要这样做:

devise_for :users do
   get '/users/sign_out' => 'devise/sessions#destroy'
end

应该处理的方式是以下两种方式之一:

    使用 DELETE 方法代替 GET

    &lt;%= link_to "Sign Out", destroy_user_session_path, method: :delete, class: "nav-link" %&gt;

-或-

    编辑你的 devise.rb 初始化器并更改

    config.sign_out_via = :deleteconfig.sign_out_via = :get

【讨论】:

【参考方案3】:

确保这一点:

在您的 Gemfile 中包含

gem 'jquery-rails' 

在 application.js 中

//= require jquery 
//= require jquery_ujs

在我看来更改路由器或退出方法不太好,此操作应始终使用 DELETE 完成。这对我有用。

【讨论】:

这是我的问题。我已经为 Bootstrap 更新了我的 application.js 文件,并在重新添加它们时删除了 //= require jquery //= require jquery_ujs,它解决了注销问题。谢谢。【参考方案4】:

由于您要销毁会话,因此它不是:get 方法,而是:delete。修改链接为:

= link_to "Log out", destroy_user_session_path, method: :delete

【讨论】:

【参考方案5】:

类似的问题:

No route matches [GET] “/users/sign_out”

请查看我的answer there(此处已删除)

【讨论】:

以上是关于没有路线匹配 [GET] "/users/sign_out" rails 5的主要内容,如果未能解决你的问题,请参考以下文章

没有路线匹配 [GET] "/users/sign_out" **Rails 5/Bootstrap 4**

Rails 3.2.13 - 没有路线匹配 [GET] "/js/jquery.fancybox.js"

带有设计的 Rails 3:没有路线匹配 /d/users/sign_out

Rails 3.0.9 + Devise + Cucumber + Capybara 臭名昭著的“没有路线匹配 /users/sign_out”

路由错误克隆目录后没有路由匹配 [GET] "/logout"

没有路线匹配 [GET] /assets