Ruby on rails 3 Rails 3响应模拟类型和内容类型

Ruby on rails 3 Rails 3响应模拟类型和内容类型,ruby-on-rails-3,mime-types,Ruby On Rails 3,Mime Types,这里是诀窍。我有一个名为Pages的模型,它有一个名为“page_type”的字段,可以是三种变体之一:“html”、“image”、“vcard”和一个名为“content”的字段。 所以现在我需要应用程序根据请求的页面类型以不同的mimetype响应 如果页面类型设置为“html”-使用适当的视图和html安全将内容呈现为html,这很容易 如果页面类型设置为“图像”-使用路径获取存储在内容中的图像,并将其发送回用户,就像用户请求图像一样 “vcard”也一样 如何才能做到这一点?如果要生成

这里是诀窍。我有一个名为Pages的模型,它有一个名为“page_type”的字段,可以是三种变体之一:“html”、“image”、“vcard”和一个名为“content”的字段。 所以现在我需要应用程序根据请求的页面类型以不同的mimetype响应

如果页面类型设置为“html”-使用适当的视图和html安全将内容呈现为html,这很容易

如果页面类型设置为“图像”-使用路径获取存储在内容中的图像,并将其发送回用户,就像用户请求图像一样

“vcard”也一样


如何才能做到这一点?

如果要生成url以访问应用程序中的资源(页面),可以使用内置的Rails视图帮助程序(如Page_url(@Page,:format=>'jpg')以REST方式指定资源位置,如/pages/2.jpg、/pages/3.vcard、/pages/4(默认为html)。然后,只需在Rails中使用repond_来交付资源:

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来处理.vcard的请求。看

如果您不控制链接生成(对资源的外部引用),并且希望得到像/pages/2这样的请求(这是一个jpeg),那么您将不得不退回到使用page\u type列来有条件地使用send\u file、send\u data或其他Rails渲染方法进行渲染。您可以考虑使用RealdSuto上为每个块创建的逻辑(方法),这样您的控制器就有了“ErrddtoToHTML”、“RealdSotoJPG”、“RealdSoto VCARD”方法。