我看到很多代碼段雲:紅寶石在rails上使用的`.html`是什麼?
respond_to do |format|
format.html { something }
format.json { something }
end
我不知道什麼html
和json
在上面的代碼片斷。他們的方法?作用域?屬性?
我看到很多代碼段雲:紅寶石在rails上使用的`.html`是什麼?
respond_to do |format|
format.html { something }
format.json { something }
end
我不知道什麼html
和json
在上面的代碼片斷。他們的方法?作用域?屬性?
讓我們來調查一下吧?這是落實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]
這是我一直在努力的答案。謝謝 !!這比我想象的要複雜得多,但現在它終於看起來不像是一些魔法。謝謝你的聲音! – innhyu
@innhyu:不客氣!你應該接受這個答案(左邊的綠色複選標記) –
從技術上講,他們是方法。這回答了你的問題了嗎? :) –
它呢!但爲什麼我無法在任何文件中找到它們?我只是不喜歡在盒子裏的魔法,這對我來說似乎是.. – innhyu
'format'是['ActionController :: MimeResponds :: Collector']的一個實例(http://api.rubyonrails.org/classes /ActionController/MimeResponds/Collector.html),文檔解釋了發生了什麼。 – Stefan