【问题标题】:Rails routes seem to be out of syncRails 路线似乎不同步
【发布时间】:2016-03-21 12:15:35
【问题描述】:

我刚刚为身份验证添加了 Devise,并且希望能够从 url 中注销我的用户,因此我将 Devise 配置更改为使用 :get 而不是 :delete。当我查看rake routes 时,它似乎是正确的:

/sites/veggies/vegj $ rake routes
                  Prefix Verb   URI Pattern                       Controller#Action
        new_user_session GET    /users/sign_in(.:format)          devise/sessions#new
            user_session POST   /users/sign_in(.:format)          devise/sessions#create
    destroy_user_session GET    /users/sign_out(.:format)         devise/sessions#destroy

但是当我尝试在我的应用程序中注销时,我收到一个路由错误,指出 /users/sign_out 已映射到 DELETE

我刚刚开始使用 Rails,所以这可能是一个非常基本的问题。感觉我需要重新加载一些东西,但我认为 rails/rake 会即时处理这样的更新,不是吗?

【问题讨论】:

  • 如果不重新启动,配置/初始化程序中的内容不会被更新
  • @FrederickCheung 路由位于config/routes.rb.. 不在初始化程序中!
  • 但是告诉设计使用 :get 进行注销的设置在 config/initializers/devise.rb

标签: ruby-on-rails ruby ruby-on-rails-4 devise


【解决方案1】:

更改initializers/devise.rb 后,您需要重新启动服务器。它们不会被自动拾取。

PS:

没有多少东西不是自动拾取的,这些是大部分

  • 新的 gem(在您进行捆绑安装之后)
  • 启动服务器后生成的文件(例如,安装新 gem、启动服务器、运行 gem 生成器)
  • initializers/*.rb文件
  • config/application.rb, config/environment.rb

可能有一些我忘记添加的额外文件,但在 95% 的情况下,您只会更改上面的文件。

【讨论】:

  • 好的,我想我需要了解什么是(什么不是)被轨道拾取。你碰巧知道有什么好的参考资料吗?
  • @doub1ejack 更新了我的答案。
  • 感谢@Avdept,这真的很有帮助。
【解决方案2】:

正如错误所说,您正在执行获取请求。您需要在链接中指定要使用删除方法。

<%= link_to "Log Out", destroy_user_session_path, method: :delete %>

确保您的 gemfile 中有 JQuery-ujs

【讨论】:

  • 根据rake routes 的输出,我应该不需要使用DELETE 方法,不是吗? "destroy_user_session GET /users/sign_out(.:format)"
  • 这不是您的屏幕截图显示的内容。我认为这是设计的默认设置,您已对其进行了编辑但未重新启动您的网站?
  • 是的,我的问题是为什么我得到了两条不同的路线(rake routes 与截图)。显然这是因为我还没有很好地掌握什么(和不需要)需要重新启动。如果您知道 Rails 的自动检测功能和不自动检测功能的详细分类,我会全神贯注 :)
  • @doub1ejack 路由更改通常不需要。
【解决方案3】:

destroy_user_session_path 或 '/users/sign_out' 应该是删除而不是获取请求,因此在定义链接时您需要提及它,因为默认情况下它将使用 get request 通过使用 method: :delete 您指出它是delete request

需要删除请求

<%= link_to "Sign Out", destroy_user_session_path, method: :delete %>

需要 GET 请求

<%= link_to "Sign Out", destroy_user_session_path  %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多