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

respond_to的通常用法就像

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

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

你应该能够使用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