我已经在我的应用程序上安装了devise,并在我的application.html.erb
文件中应用了以下内容:
<div id="user_nav">
<% if user_signed_in? %>
Signed in as <%= current_user.email %>. This cannot be cheese?
<%= link_to 'Sign out', destroy_user_session_path %>
<% else %>
<%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
<% end %>
</div>
我跑了rake routes
并确认所有路线均有效。
另外,在我的routes.rb
文件中,我有devise_for :users
和root :to => "home#index"
。
单击“注销”链接时,出现以下路由错误:
No route matches "/users/sign_out"
任何想法导致错误的原因是什么?
#1楼
在“ devise_for:users”之前查看您的routes.rb是否具有“ resource:users”,然后尝试交换它们:
作品
- devise_for:用户
- 资源:用户
失败
- 资源:用户
- devise_for:用户
#2楼
在您的route.rb中:
devise_for :users do
get '/sign_out' => 'devise/sessions#destroy'
get '/log_in' => 'devise/sessions#new'
get '/log_out' => 'devise/sessions#destroy'
get '/sign_up' => 'devise/registrations#new'
get '/edit_profile' => 'devise/registrations#edit'
end
并在您的application.html.erb中:
<%if user_signed_in?%>
<li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>
#3楼
要使注销链接成为DELETE RESTful调用的功能,需要使用rails code = link_to('Logout', destroy_user_session_path, :method => :delete)
来实现html属性data-method = "delete"
。
但是,如果您未安装gem jquery-ujs
或未通过= javascript_include_tag "application"
在application.html中调用生成的javascript,则响应将作为GET请求发送,并且路由将失败。
如果您不想使用jquery-ujs
或无法找到使其工作的方法,则有几种选择:
- 在
devise.rb
config.sign_out_via
更改为equal:get
(不建议这样做,因为DELETE是适当的RESTful查询) - 或将
link_to
更改为= button_to('Logout', destroy_user_session_path, :method => :delete)
。 使用button_to
Rails将在进行正确的DELETE调用上进行繁重的工作。 然后,您可以根据需要设置按钮的样式,使其看起来像一个链接。
#4楼
不要忘记在application.js中添加以下行(Rails 3)
//= require_self
//= require jquery
//= require jquery_ujs
将jquery_ujs
包含到我的Rails应用程序中,现在可以使用了。
#5楼
这个问题已经有很多答案。 对我来说,问题有两个方面:
当我扩展路线时:
devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
我收到警告称此产品已贬值,因此我将其替换为:
devise_scope :users do get '/users/sign_out' => 'devise/sessions#destroy' end
我以为我会删除我的jQuery。 不好的选择。 Devise正在使用jQuery“伪造” DELETE请求并将其作为GET发送。 因此,您需要:
//= require jquery //= require jquery_ujs
并且当然与前面提到的链接相同:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3165151