2011-06-16 85 views
0

下面的link_to声明:如何在嵌套路径中指定url_for的格式?

<%= 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

一个URL如果我想要的网址是/programs/1/program_codes/1.svg,我怎么指定被传递给url_for数组中的格式?我搜索了Rails API文档并查看了几个示例,但一直无法找到像这样的东西。

回答

1

我认为你在寻找:格式选项。它会将文件扩展名附加到链接,例如'.svg'

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

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

希望这会有所帮助。

+0

我得到的从文档,但如果你看看我的例子,有一个数组传递给url_for(由于嵌套的资源),这是什么挂我。我试过了,格式=>“svg”和:format =>:svg在数组内部和外部,它似乎并不起作用。很混乱。 – MikeH 2011-06-16 13:07:49

+1

有没有理由不使用命名路线?那么你可以有像{program_code_path(program_code.program,program_code),:format =>“svg”} – 2011-06-17 02:48:26

+0

我必须尝试。这段代码是由一家专业Ruby公司编写的,所以不知道为什么不使用命名路由 - 他们编写的大部分代码都是原始的,所以我认为他们这样做的理由一定是有原因的,我只是没有了解。 – MikeH 2011-06-18 02:34:19

1

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

幸运的是,您可以使用polymorphic_url

例如,如果server可能是ManagedServer或UnmanagedServer的实例,都可以有警报,你可以这样做:

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

,并且会给你

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