没有路线匹配 [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' => 'devise/sessions#destroy', as: 'destroy_user_session_via_get'
而不是你写的。并考虑写<%= link_to "Sign Out", destroy_user_session_via_get_path, method: :get , class: "nav-link" %>
编辑:给出更多的润色以使其更易于理解
我还是照你说的做了未定义的局部变量或方法`destroy_user_session_via_get_path【参考方案2】:
如果您打算保留注销/users/sign_out
的默认路由路径,则不要这样做:
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
应该处理的方式是以下两种方式之一:
使用 DELETE 方法代替 GET
<%= link_to "Sign Out", destroy_user_session_path, method: :delete, class: "nav-link" %>
-或-
编辑你的 devise.rb 初始化器并更改
config.sign_out_via = :delete
到 config.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”