Ruby on Rails可以在不支持格式时返回一行吗?

时间:2010-08-27 19:17:03

标签: ruby-on-rails

respond_to的通常用法就像

respond_to do |format|
  format.html
  format.xml { render :xml => @data }
end

是否可以这样做,以便当不支持该格式时(例如上面不支持json或csv),而不是返回任何内容,返回一条文字行说“不支持该格式”,或者更好的是,它自动报告“只支持html和xml”?它只能知道现有的format.htmlformat.xml行支持html和xml。 (如果可能的话)

1 个答案:

答案 0 :(得分:6)

您应该可以使用format.all

respond_to do |format|
  format.html
  format.xml { render :xml => @data }
  format.all { render :text=>'the format is not supported' }
end

如果您想列出支持的格式,您需要扩展 Responder 类。

将其放在 config / initializers / extend_responder.rb

之类的内容中
module ActionController
  module MimeResponds
    class Responder

      def valid_formats
        @order.map(&:to_sym)
      end

    end
  end
end

然后在你的控制器中使用它:

respond_to do |format|
  format.html
  format.json { render :text=>'{}' }
  format.all { render :text=>"only #{(format.valid_formats - [:all]).to_sentence} are supported" }
end