Say*_*yuj 20 ruby url ruby-on-rails devise
我正在使用设计
sign_in和sign_up网址正在工作
但是,当我尝试网址时: http://localhost:3000/users/sign_out
它会产生路由错误
No route matches [GET] "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
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"}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
And*_*dev 43
出错的原因是使用GET HTTP方法无法访问路由.注意rake routes输出中相关行的内容:
destroy_user_session DELETE /users/sign_out(.:format)
Run Code Online (Sandbox Code Playgroud)
这意味着,如果要将用户注销,则需要向该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
Run Code Online (Sandbox Code Playgroud)
重要的是:method => :delete.请注意,浏览器并不真正支持DELETE请求,rails实际上是在POST数据,但它会发送一个模拟DELETE方法的特殊参数.
这背后的原因是"退出"网址会将当前用户记录下来,这是一种破坏性操作.如果它可以通过浏览器自由访问,它可能会导致各种问题.GET请求永远不应该改变服务器的状态.有关这方面的更多信息,这是一篇不错的维基百科文章:http://en.wikipedia.org/wiki/REST#RESTful_web_services
Vis*_*hal 13
任何上述建议对我都不起作用....
这篇文章对于找到其他替代方案更有用. 没有路由匹配"/ users/sign_out"设计rails 3
我不得不在application.js文件中添加以下行
//= require_tree .
// Add following lines.
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)