respond_to格式的全方位选项。*

时间:2011-06-02 13:29:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在研究呈现更复杂的回应。

具体来说,我正在搜索用于格式化多个级别的yaml和json响应的选项,但是现在我无法找到有关选项的任何api信息。

我见过一些关于:include和:仅在其他样本控制器中。我想知道更复杂的文档呈现的全方位选择(特别是yaml,但我想为所有人学习)

例如:

 def index
    @people = Person.find(:all)

    respond_to do |format|
      format.*  ?????????????????????
    end
  end

背景:尝试组合对我来说更复杂的yaml输出,从控制器中查看我可以做什么以及如何,而不是必须构建特定的视图。

2 个答案:

答案 0 :(得分:4)

支持一组标准的MIME类型: :html,:xhtml,:text,:txt,:js,:css,:ics,:csv,:xml,:rss,:atom,:yaml,:url_encoded_form,:multipart_form,:json。

要创建新的,请在mime_types.rb初始化程序

中注册它们
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
# Mime::Type.register_alias "text/html", :iphone

我希望这会有所帮助。

答案 1 :(得分:3)

阅读完rails代码后,我可以肯定地说,没有其他任何你不知道的东西。 (虽然API文档中似乎缺少documentation for respond_to in block form

基本上有两种方法可以使用respond_to

声明

class WidgetsController
  respond_to :html, :xml, :json, only: [:index, :show]

  def index
    @widgets = Widget.all
    respond_with @widgets
  end
  …
end

阻止

class WidgetsController
  def index
    @widgets = Widget.all
    respond_to do |format|
      format.html #do default
      format.pdf {…} # handle in block
      format.any(:json, :xml) {…} # handle anything listed
    end
  end
  …
end

您不能使用块表单上的选项(它完全是一个不同的方法定义),:only:except是声明版本接受的唯一选项。