Ruby on Rails – 设计用户/ sign_out无法正常工作

我正在使用设计sign_insign_upurl正在运行

但是,当我尝试url时: http://localhost:3000/users/sign_out

它会生成路由错误

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

我怎样才能解决这个问题?

耙路线

 rake routes new_user_session GET /users/sign_in(.:format) {:action=>"new", :controller=>"devise/sessions"} user_session POST /users/sign_in(.:format) {:action=>"create", :controller=>"devise/sessions"} destroy_user_session DELETE /users/sign_out(.:format) {:action=>"destroy", :controller=>"devise/sessions"} user_password POST /users/password(.:format) {:action=>"create", :controller=>"devise/passwords"} new_user_password GET /users/password/new(.:format) {:action=>"new", :controller=>"devise/passwords"} edit_user_password GET /users/password/edit(.:format) {:action=>"edit", :controller=>"devise/passwords"} PUT /users/password(.:format) {:action=>"update", :controller=>"devise/passwords"} cancel_user_registration GET /users/cancel(.:format) {:action=>"cancel", :controller=>"devise/registrations"} user_registration POST /users(.:format) {:action=>"create", :controller=>"devise/registrations"} new_user_registration GET /users/sign_up(.:format) {:action=>"new", :controller=>"devise/registrations"} edit_user_registration GET /users/edit(.:format) {:action=>"edit", :controller=>"devise/registrations"} PUT /users(.:format) {:action=>"update", :controller=>"devise/registrations"} DELETE /users(.:format) {:action=>"destroy", :controller=>"devise/registrations"} status_message_index GET /status_message(.:format) {:action=>"index", :controller=>"status_message"} POST /status_message(.:format) {:action=>"create", :controller=>"status_message"} new_status_message GET /status_message/new(.:format) {:action=>"new", :controller=>"status_message"} edit_status_message GET /status_message/:id/edit(.:format) {:action=>"edit", :controller=>"status_message"} status_message GET /status_message/:id(.:format) {:action=>"show", :controller=>"status_message"} PUT /status_message/:id(.:format) {:action=>"update", :controller=>"status_message"} DELETE /status_message/:id(.:format) {:action=>"destroy", :controller=>"status_message"} home /home(.:format) {:action=>"index", :controller=>"status_message"} root / {:controller=>"home", :action=>"index"} 

的routes.rb

 Microblog::Application.routes.draw do devise_for :users, :controllers => {:migrations => "users/registrations"} resources 'status_message' match 'home' => 'status_message#index' root :to => 'home#index' end 

出错的原因是使用GET HTTP方法无法访问路由。 请注意rake routes输出中相关行的内容:

 destroy_user_session DELETE /users/sign_out(.:format) 

这意味着,如果要将用户注销,则需要向该URL发送DELETE请求。 在rails中,您可以生成一个链接,如下所示:

 link_to 'Sign out', destroy_user_session_path, :method => :delete # alternatively (although NOT recommended): link_to 'Sign out', '/users/sign_out', :method => :delete 

重要的部分是:method => :delete 。 请注意,浏览器并不真正支持DELETE请求,rails实际上是在POST数据,但它会发送一个模拟DELETE方法的特殊参数。

这背后的原因是“退出”url会记录当前用户,这是一种破坏性操作。 如果它可以通过浏览器自由访问,它可能会导致各种问题。 GET请求永远不应该改变服务器的状态。 有关这方面的更多信息,这是一篇很好的维基百科文章: http : //en.wikipedia.org/wiki/REST#RESTful_web_services

任何上述建议都不适合我….

这篇文章对于找到其他替代方案更有用。 没有路由匹配“/ users / sign_out”设计rails 3

我必须在application.js文件中添加以下行

 //= require_tree . // Add following lines. //= require jquery //= require jquery_ujs 

我有完全相同的症状,但我也使用jquery-turbolinks与masonry-rails在网站过渡和位置“很好”的图像。

我发现这个“打破”过渡:

 //= require jquery_ujs 

所以我删除它,过渡就像一个魅力……但是当我去注销时,即使我的rake路线显示路径的存在,我也得到了上述错误。

对我的“修复”原来是添加// = require rails-ujs并重新安排我的树,所以我最终得到:

 //= require rails-ujs //= require jquery //= require jquery.turbolinks //= require twitter/bootstrap //= require masonry/jquery.masonry //= require masonry/jquery.imagesloaded.min //= require masonry/modernizr-transitions //= require turbolinks //= require_tree . 

顺便说一句,任何在砌体工作时发现此错误的人都应该在div中添加“过渡启用的无限滚动clearfix”,并使用他们想要操作的资源的id …在我的案例中“bookads” “

 
<% @books.each do |book| %>

<%= book.title %>

... etc

注意我使用的各个元素的id称为“box”

在你的coffeescript中:

 $ -> $('#bookads').imagesLoaded -> $('#bookads').masonry itemSelector: '.box' isFitWidth: true isAnimated: true 

为了获得“平滑”动画,我还添加了masonry / jquery.imagesloaded.min和masonry / modernizr-transitions,如上图所示。

希望这个答案可以节省我花在寻找解决方案上的几个小时。