这是诀窍。我有一个名为Pages的模型,其中包含一个名为“page_type”的字段,可以说是3个变体之一:“html”,“image”,“vcard”和一个名为“content”的字段。 所以现在我需要应用程序根据请求的页面类型响应不同的mimetypes。
如果page_type设置为“html” - 使用适当的视图和html_safe将内容呈现为html,那很容易。
如果page_type设置为“image” - 使用存储在内容中的路径获取图像,并将其发送回用户,就像他请求了图像一样。
“vcard”相同。
我该怎么做?
答案 0 :(得分:1)
如果您要生成用于访问应用中资源(页面)的URL,则可以RESTful指定资源位置,例如/pages/2.jpg,/pages/3.vcard,/ pages / 4( default是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'方法。