【问题标题】:Devise routes issue in Rails 3.1 with No route matches [GET] "/users/sign_out"在 Rails 3.1 中设计路由问题,没有路由匹配 [GET] "/users/sign_out"
【发布时间】:2011-12-27 18:31:04
【问题描述】:

我将 Devise 1.4.9 身份验证 gem 与我的 Rails 3.1 应用程序一起使用,当我单击任何链接时,我会遇到路由错误。当我点击退出链接时会发生以下情况:

Routing Error

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

我正在用这种方法创建链接:

<%= link_to('Sign Out', destroy_user_session_path, :method => :delete) %>

这是链接在源代码中的呈现方式:

<a href="/users/sign_out" data-method="delete" rel="nofollow">Sign Out</a>

我的布局标题中有这一行:

<%= javascript_include_tag :defaults %>

这些行在我的 application.js 文件中:

//
// = require jquery
// = require jquery_ujs
// = require_tree .

这里是相关的 rake 路由输出:

          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"}

我已经尝试了该线程中的几乎所有内容,但均无济于事:

No route matches "/users/sign_out" devise rails 3

我已经多次重启了服务器。

这个问题似乎在过去出现过,但没有一个描述的解决方案改变了这种行为,我很难过。

【问题讨论】:

  • 嘿@wrburgess 你能检查一下你的Gemfile 中是否有gem 'jquery-rails' 。我也很好奇您是否可以在浏览器中检查您的源代码并检查是否包含 jquery_ujs。您应该会看到类似于:&lt;script src="/assets/jquery_ujs.js?body=1" type="text/javascript"&gt;&lt;/script&gt;
  • 我确实加载了那个 gem,但脚本不是......可能是问题

标签: ruby-on-rails ruby devise gem


【解决方案1】:

写作

devise_scope :user do 
  get "/users/sign_out", :to => "devise/sessions#destroy" 
  end 

在我的routes.rb 中为我解决了这个问题。

【讨论】:

    【解决方案2】:

    如果您在application.js 中定义包含,请尝试将:defaults 传递给javascript_include_tag 时将其重命名为:application

    <%= javascript_include_tag :application %>
    

    【讨论】:

      【解决方案3】:

      第一,您可能想要使用按钮(可以设置为看起来像链接)来进行破坏性操作,如this checklist for using GET 所述。仅此一项就可以解决问题。

      二,你需要文件中的csrf_meta_tag,你可能已经有了。

      您确认 JS 文件实际上正在加载吗?

      (我认为带有空格的// = 可能是个问题,但显然它与Rails 默认创建的//= 一样好用。)

      【讨论】:

      • 我的标题中似乎确实缺少一些东西,所以我要看看 JS 问题。
      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2014-01-29
      相关资源
      最近更新 更多