【问题标题】:No route matches [GET] "/users/sign_out" rails 5没有路线匹配 [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

【问题讨论】:

    标签: ruby-on-rails ruby devise ruby-on-rails-5


    【解决方案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
    

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

    1. 使用 DELETE 方法代替 GET

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

    -或-

    1. 编辑你的 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(此处已删除)

        【讨论】:

          猜你喜欢
          • 2018-03-04
          • 2011-09-27
          • 1970-01-01
          • 1970-01-01
          • 2013-06-15
          • 2014-01-29
          • 1970-01-01
          • 2015-12-09
          相关资源
          最近更新 更多