我创建了一个简单的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 %>
答案 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 = :delete
至config.sign_out_via = :get
并从您的路线文件中删除, sign_out_via [:delete]
。