2012-05-04 110 views
0

這裏有個竅門。我有一個稱爲「page_type」字段的模型,這個字段可以是其中一種,可以說是3種變體:「html」,「image」,「vcard」和一個名爲「content」的字段。 因此,現在我需要應用程序根據請求的頁面類型來使用不同的mimetypes進行響應。Rails 3響應mimetype和內容類型

如果page_type設置爲「html」 - 使用適當的視圖和html_safe將內容呈現爲html,那很容易。

如果page_type設置爲「image」 - 獲取圖像,使用路徑,存儲在內容中並將其發回給用戶,就好像他請求了圖像一樣。

與「vcard」相同。

我該怎麼做?

回答

1

如果您生成的URL可以訪問您的應用中的資源(頁面),那麼可以使用REST風格指定資源位置,例如/pages/2.jpg,/pages/3.vcard,/ pages/4 (默認爲html),使用內置的Rails視圖助手,如page_url(@page,:format =>'jpg')。然後,它只是在Rails中使用repond_to提供資源的問題:

respond_to do |format| 
    format.html { # default rendering in show.erb.html } 
    format.jpg { # perhaps send_file or send_data call } 
    format.vcard { # send attachment } 
end 

退房的Rails Routing Guides更多信息。您需要配置Rails來處理.vcard的請求。見this gist

如果您不控制鏈接生成(外部引用您的資源)並希望獲得像/ pages/2(這是一個jpeg)之類的請求,那麼您必須退回到使用您的page_type列來有條件地使用send_file,send_data或其他Rails渲染方法進行渲染。您可以考慮重新使用您爲上述respond_to中的每個塊創建的邏輯(方法),以便您的控制器具有'respond_to_html','respond_to_jpg','respond_to_vcard'方法。

相關問題