在rails 2控制器中,我从模型中获取了一些数据
@company = Company.first
并在视图中生成网址
<%= url_for @company %>
当然这很好用。但是当我尝试在剧本中使用它时
include ActionController::UrlWriter
default_url_options[:host] = 'www.example.com'
@company = Company.first
puts url_for(@company)
它以
失败/gems/actionpack-2.3.8/lib/action_controller/url_rewriter.rb:127:in“merge”:无法将公司转换为Hash(TypeError)
有什么想法吗?
答案 0 :(得分:1)
我认为问题可能是您在视图中调用的url_for
方法(and defined on ActionView as a helper)不相同url_for
当你在控制器中时调用的方法。
ActionController::Base
有自己的,类似(但不相同)的方法称为url_for
方法。在控制器的范围内,ActionController::Base
上定义的方法是被调用的方法。 http://apidock.com/rails/ActionController
上面的ActionController文档链接在技术上指向了API的Rails3版本,但它并没有真正改变。如果您绝对需要或想要Rails 2.3文档,可以download them here。
答案 1 :(得分:0)
这些方法不一样。
在您看来,您正在呼叫ActionView::Helpers::UrlHelper#url_for
。该方法在其中有几个检查,以根据您传入的数据类型决定要做什么。如果传入模型对象,最终会在方法ActionController::PolymorphicRoutes#polymorphic_path
中找出它应该指定的路径正在使用。
您在脚本中调用的url_for
不知道如何执行此操作。但是,它仍然可以做很多,我建议您阅读该文件中的注释,以获取有关如何使用它的想法。您收到的错误消息将指向您。
/gems/actionpack-2.3.8/lib/action_controller/url_rewriter.rb
(注意:actionpack 2.3.14可用。您可能希望在升级时进行升级。)