什么是在轨道上的红宝石中使用的`.html`?

时间:2016-02-09 10:12:28

标签: ruby-on-rails ruby web

我看到很多代码片段:

respond_to do |format|
  format.html { something }
  format.json { something }
end

我想知道上面的代码段中htmljson是什么。他们是方法吗?作用域?属性?

1 个答案:

答案 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]