Rails - 在Devise中销毁会话路径时出现路由错误
Rails - 在Devise中销毁会话路径时出现路由错误
我创建了一个简单的Rails应用,并在其中实现了Devise,我添加了登录/注册功能,它正常工作。但是当我添加"退出登录"功能时,它给我一个"Routing Error",错误信息是"No route matches [GET] '/ideas/sign_out'"。
这是我实现的代码:
<% unless idea_signed_in? %>
我甚至尝试了:method => :delete
,但仍然没有效果。我运行了rake
routes,我的路由是有效的:
destroy_idea_session_path DELETE /ideas/sign_out(.:format) devise/sessions#destroy
我在application.html.erb中添加了<%= javascript_include_tag :defaults %>
,但仍然没有运气。
我的routes.rb文件:
Rails.application.routes.draw do devise_for :ideas root 'welcome#index' end
Rails - 在Devise中销毁会话路径时遇到路由错误
问题的出现原因是忘记在link_to引用中加入method: :delete开关。为了确保这不是问题,可以使用以下代码:
<%= link_to "Logout", destroy_idea_session_path, method: :delete %>
如果你的链接是这样实现的,似乎是这样的,下一个潜在的问题是你的视图中没有加载jquery。delete动词实际上不被大多数浏览器支持,因此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方法。