我已经在个人应用程序上安装了devise,并在个人application.html.erb
文件中应用了如下内容: javascript
<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
并确认全部路线均有效。 html
另外,在个人routes.rb
文件中,我有devise_for :users
和root :to => "home#index"
。 java
单击“注销”连接时,出现如下路由错误: jquery
No route matches "/users/sign_out"
任何想法致使错误的缘由是什么? session
在“ devise_for:users”以前查看您的routes.rb是否具备“ resource:users”,而后尝试交换它们: app
做品 ui
失败 spa
在您的route.rb中: code
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中: htm
<%if user_signed_in?%> <li><%= link_to "Sign_out", sign_out_path %></li> <% end %>
要使注销连接成为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调用上进行繁重的工做。 而后,您能够根据须要设置按钮的样式,使其看起来像一个连接。 不要忘记在application.js中添加如下行(Rails 3)
//= require_self //= require jquery //= require jquery_ujs
将jquery_ujs
包含到个人Rails应用程序中,如今可使用了。
这个问题已经有不少答案。 对我来讲,问题有两个方面:
当我扩展路线时:
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 %>