我看到很多代码片段:
respond_to do |format|
format.html { something }
format.json { something }
end
我想知道上面的代码段中html
和json
是什么。他们是方法吗?作用域?属性?
答案 0 :(得分:3)
让我们调查,好吗?这是respond_to
的实现:
def respond_to(*mimes)
raise ArgumentError, "respond_to takes either types or a block, never both" if mimes.any? && block_given?
collector = Collector.new(mimes, request.variant)
yield collector if block_given?
if format = collector.negotiate_format(request)
_process_format(format)
_set_rendered_content_type format
response = collector.response
response ? response.call : render({})
else
raise ActionController::UnknownFormat
end
end
(顺便说一句,文档非常详尽。请查看。)
我们看到它会为块产生一些Collector
(您称之为format
)。这是:https://github.com/rails/rails/blob/0e70595acc8796c3e0854ef72df478d597243e68/actionpack/lib/abstract_controller/collector.rb
我们看到它只是枚举所有Mime内容类型并为它们生成(动态)方法。哦,JFYI,以下是respond_to
所有可能的事情:
Mime::SET.map(&:symbol)
=> [:html,
:text,
:js,
:css,
:ics,
:csv,
:vcf,
:png,
:jpeg,
:gif,
:bmp,
:tiff,
:mpeg,
:xml,
:rss,
:atom,
:yaml,
:multipart_form,
:url_encoded_form,
:json,
:pdf,
:zip,
:doc,
:excel]