如何在嵌套路由中指定url_for的格式?

时间:2011-06-16 06:18:53

标签: ruby-on-rails routing link-to nested-resources url-for

以下link_to语句:

  <%= link_to image_tag("icons/document_24.png"),
              [program_code.program, program_code],
              :class      => :no_hover,
              :alt        => "Print Tracking Code",
              :title      => "Print Tracking Code",
              :target     => :new
  %>

会生成类似/programs/1/program_codes/1

的网址

如果我希望网址为/programs/1/program_codes/1.svg,如何指定传递给url_for的数组中的格式?我搜索了Rails API文档并查看了几个示例,但却找不到这样的内容。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找:format 选项。它会将文件扩展名附加到链接,例如'.SVG'

确保将:format选项放在link_to方法的路径构建哈希中。

<%= link_to 'somewhere', {somewhere_to_path(@var), :format => "svg"},:title => "Print Tracking Code", :target => "_blank" %>

希望这有帮助。

答案 1 :(得分:1)

如果您正在处理特定的类并且可以使用命名路由,那么这是最有效的选项。但是,如果您正在处理嵌套资源并且未修复父资源(例如,在多态关联中),并且您想要指定格式,则url_for无法满足您的需求。

幸运的是,您可以使用polymorphic_url

例如,如果server可以是ManagedServer或UnmanagedServer的实例,并且两者都可以有警报,则可以执行以下操作:

polymorphic_url([server, :alerts], :format => :xml)

那会给你

/managed_server/123/alerts.xml
/unmanaged_server/123/alerts.xml