【问题标题】:Routes stopped working when upgrading Rails 3.0 to 3.1将 Rails 3.0 升级到 3.1 时路由停止工作
【发布时间】:2013-02-08 18:27:06
【问题描述】:

我正在使用 Ruby 1.8.7 和 Rails 3.1。我的应用程序在 Rails 3.0 中运行良好,但是当我将它升级到 Rails 3.1.4 时,我所有的 url 助手都坏了!

在过去两天像疯子一样谷歌搜索之后,我已经放弃了,是时候寻求帮助了。我不认为问题出在我的 routes.rb 文件上,而是视图/助手方面的更多问题。

我的 routes.rb 中有以下内容:

resources :sessions

在我的主页视图中,我有以下 link_to,但出现错误:

<%= link_to "Login", new_session_path %>

当我执行 rake 路由时,我得到以下输出,因此路径存在:

          sessions GET    /sessions(.:format)          {:controller=>"sessions", :action=>"index"}
                   POST   /sessions(.:format)          {:controller=>"sessions", :action=>"create"}
       new_session GET    /sessions/new(.:format)      {:controller=>"sessions", :action=>"new"}
      edit_session GET    /sessions/:id/edit(.:format) {:controller=>"sessions", :action=>"edit"}
           session GET    /sessions/:id(.:format)      {:controller=>"sessions", :action=>"show"}
                   PUT    /sessions/:id(.:format)      {:controller=>"sessions", :action=>"update"}
                   DELETE /sessions/:id(.:format)      {:controller=>"sessions", :action=>"destroy"}

当我在浏览器中转到 /sessions/new 时,页面再次加载,路由存在,但在基于 _path 的 url 上出错:

<%= form_tag sessions_path, :method => :post do -%>

我得到的错误如下:

ActionView::Template::Error (undefined local variable or method `sessions_path' for #<#<Class:0x109cb8900>:0x109cab840>):

它必须与 url_for 帮助器有关,因为路由确实存在。我还应该寻找什么?

更新 1:

我在 application_helper.rb 中添加了以下内容:

include Rails.application.routes.url_helpers

现在当我收到以下错误时:

In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers

这不是我刚刚做的吗?

更新 2:

以下内容按照 Yoshiji 先生的建议进行:

Rails.application.routes.url_helpers.sessions_path

更新 3:

通过删除供应商目录中的一些旧 Rails 2 插件,我让 session_path 再次工作。

【问题讨论】:

  • 问起来可能很疯狂,但您是否重新启动了服务器?
  • 是的,我确实重新启动了我的服务器并得到了相同的结果。
  • 嗯 /sessions(.:format) 似乎响应了 GET 请求,并且您要求使用 POST 方法。你试过 :get 吗?
  • 你可以试试Rails.application.routes.url_helpers.sessions_path 而不是只sessions_path 吗?
  • 我发现了问题所在。我的供应商目录中有一些旧的 rails 2 插件,它们导致 rails 3.1 出现问题。我很高兴解决了这个问题,感谢您的帮助 MrYoshiji。

标签: ruby-on-rails ruby-on-rails-3.1 routes view-helpers url-for


【解决方案1】:

删除了 vendor/plugins 中的一些 Rails 2 插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2018-03-12
    相关资源
    最近更新 更多