当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《RubyonRails-设计用户/sign_out无法正常工作》经验,为你挑选了2个好方法。

我正在使用设计 sign_insign_up网址正在工作

但是,当我尝试网址时: 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

Andrew Radev.. 43

出错的原因是使用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方法的特殊参数.

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



1> Andrew Radev..:

出错的原因是使用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方法的特殊参数.

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


您使用的是3.1版本的rails吗?如果是这样的话,那就不会那样了.在3.1中,"app/assets/javascripts"中的"application.js"文件应该包含相关文件,它叫做"jquery_ujs.js".在这种情况下,你应该使用`javascript_include_tag"应用程序"`而你应该没问题.你绝对应该谷歌,但这仍然很新,你应该尝试理解这个过程.
我忘了提到你需要在页面上包含"rails.js"javascript.当您单击该链接时,rails使用js生成POST请求.你应该在布局的head部分放置`<%= javascript_include_tag'trail'%>`.

2> Vishal..:

任何上述建议对我都不起作用....

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

我不得不在application.js文件中添加以下行

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有