我正在使用带有 Rails 3.1 的 Ruby 1.8.7。我的应用程序在 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 再次工作。