控制器中的url_for

时间:2011-09-15 13:05:19

标签: ruby-on-rails

在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)

有什么想法吗?

2 个答案:

答案 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可用。您可能希望在升级时进行升级。)

相关问题