导轨设计,没有路线匹配注销

Posted

技术标签:

【中文标题】导轨设计,没有路线匹配注销【英文标题】:rails devise, no route matches logout 【发布时间】:2011-10-12 02:46:19 【问题描述】:

虽然有很多类似的问题,但我已经搜索了几个小时,但仍然无法解决。

环境 导轨 3.0.9 红宝石 1.9.2 设计 1.4.2

我更改了默认登录网址:

 5   resources :users
 6   devise_for :users, :path => "", :path_names =>  :sign_in => 'login', :sign_out  
     => 'logout', :password => 'secret', :confirmation => 'verification', :unlock =>
     'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' 

http://localhost:3000/login 对我来说很好用 但我包括

 = link_to 'sign_out', destroy_user_session_path, :method => :delete

在我的 application.haml 中,单击它后,它说没有路由匹配“/logout” 为什么? 请帮帮我。

【问题讨论】:

rake routes 的输出是什么? 你试过谷歌搜索吗? ***.com/questions/6805491/… 【参考方案1】:

我遇到了一个几乎相同的问题,并且由于 SO 很容易解决(link to my question)。首先,确保您的布局文件“application.html.erb”中有<%= javascript_include_tag :defaults %>

然后,在您的配置 -> 初始化程序 -> “devise.rb” 文件中确保它显示:

config.sign_out_via = :delete

你的“sign_out”代码destroy_user_session_path, :method => :delete应该可以工作。

【讨论】:

我正在使用 ruby​​ 1.9.2p180、Rails 3.1.0.rc4 并设计 1.4.2。我的布局文件中有 。并使用 :delete %> 但它仍然对我不起作用 在你的“devise.rb”初始化文件中你有config.sign_out_via = :deleteconfig.sign_out_via = :get吗?最近对设计处理路线的方式进行了更新。如果您使用 :delete 方法,则需要将您的 sign_out 路径配置为第一个选项。 我也有同样的问题。我在devise.rb(设置为:delete)和link_to(:method =>:delete)中正确设置了它。我也在使用并包含 JQuery。但是,我仍然收到“GET”请求。我还检查了生成的代码,我看到了 link_to 方法的以下内容:Logout。 我建议您查看我的问题的答案 (***.com/questions/6557311/…)。我建议您仔细检查不同用户遇到的各种问题,您可能会发现一些可以解决您问题的问题。如果没有,请告诉我。 我刚刚遇到了这个问题。这不是我以前见过的东西。这个答案有助于我的调试 - 我注意到我的 javascript 文件没有加载(在开发的早期阶段)。我修复了我的 JS 文件以按预期加载并且路由正常工作。【参考方案2】:

这个聚会有点晚了,但这里有另一个answer的帮助

指定你的方法:

<%= link_to "sign out", destroy_user_session_path, method: :delete %>

【讨论】:

【参考方案3】:

config/initializers/devise.rb 中设置config.sign_out_via = :get 以使用以下代码作为您的退出链接。

<%= link_to "Sign Out", destroy_user_session_path %>

【讨论】:

投反对票,因为这不如使用 post + csrf 令牌安全。

以上是关于导轨设计,没有路线匹配注销的主要内容,如果未能解决你的问题,请参考以下文章

设计路线被调用时被跳过

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

根据 AJAX 请求设计注销用户。导轨 3.1

rails 6中没有针对多个路线参数的路线匹配

没有路线匹配错误

如果没有找到模型,则转到下一个匹配路线