2016-02-09 16 views
-1

我看到很多代碼段雲:紅寶石在rails上使用的`.html`是什麼?

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

我不知道什麼htmljson在上面的代碼片斷。他們的方法?作用域?屬性?

+0

從技術上講,他們是方法。這回答了你的問題了嗎? :) –

+0

它呢!但爲什麼我無法在任何文件中找到它們?我只是不喜歡在盒子裏的魔法,這對我來說似乎是.. – innhyu

+0

'format'是['ActionController :: MimeResponds :: Collector']的一個實例(http://api.rubyonrails.org/classes /ActionController/MimeResponds/Collector.html),文檔解釋了發生了什麼。 – Stefan

回答

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] 
+0

這是我一直在努力的答案。謝謝 !!這比我想象的要複雜得多,但現在它終於看起來不像是一些魔法。謝謝你的聲音! – innhyu

+0

@innhyu:不客氣!你應該接受這個答案(左邊的綠色複選標記) –