2011-06-16 151 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