Rails - 在Devise中销毁会话路径时出现路由错误

时间:2015-10-14 19:16:00

标签: ruby-on-rails devise

我创建了一个简单的rails应用程序并在其上实现了设计,我添加了登录/注册功能,它工作正常。但是当我添加"退出"功能,它为HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \ -f 2)")"; done; echo $HASH 提供了Routing Error

以下是我实施的内容:

No route matches [GET] "/ideas/sign_out"

甚至尝试<% unless idea_signed_in? %> <li><a href="#">Explore</a></li> <li><%= link_to "Sign in", new_idea_session_path %></li> <li><%= link_to "Share an idea", new_idea_registration_path %></li> <% else %> <li><a href="#">Dashboard</a></li> <li><a href="#">Explore</a></li> <li><%= link_to "Sign Out", destroy_idea_session_path, method: :delete %></li> <% end %> ,但仍然没有。我:method => :delete路线和路线有效:

ran rake

我在我的application.html.erb中添加了destroy_idea_session_path DELETE /ideas/sign_out(.:format) devise/sessions#destroy,但仍然没有运气。

我的routes.rb

<%= javascript_include_tag :defaults %>

2 个答案:

答案 0 :(得分:2)

你已经知道了问题 -

  

没有路线匹配[GET] "/ideas/sign_out"

这意味着您尝试使用logout方法链接到:get链接。

主要原因是忘记将method: :delete开关放在link_to引用中。要确保这不是问题,您可以使用以下内容:

<%= link_to "Logout", destroy_idea_session_path, method: :delete %>

<强> JQuery的

如果您的链接似乎是这样实现的,那么下一个潜在的问题是您没有在视图中加载jquery

Rails delete method it doesn't work

delete动词actually isn't supported by most browsers,因此,Rails使用jquery修改HTML以将delete开关作为链接data的一部分传递属性。

名义上,您需要确保在视图中加载了JQuery。布局:

#app/views/layouts/application.html.erb
<%= javascript_include_tag "application" %>

#app/assets/javascripts/application.js.erb
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

这将确保加载JQuery,并且您的应用程序可以处理DELETE方法。

答案 1 :(得分:1)

尝试将devise_for :ideas更改为devise_for :ideas, sign_out_via [:delete]

您的控制器似乎正在发送get请求而不是删除请求。确保在用于测试的任何设备上启用了Javascript - 如果未启用JS,请求将回退到GET。

编辑:确保您找到您的链接发送的请求。

如果所有其他方法都失败了,请转到您的Devise配置文件并更改该行 config.sign_out_via = :deleteconfig.sign_out_via = :get并从您的路线文件中删除, sign_out_via [:delete]