在控制器的動作中處理完請求之後,接下來要準備對客戶端呈現回應,先前例子中,如果執行了xxx動作,接下來預設就會使用xxx.html.erb來呈現回應。
實際上,Rails會在動作完成之後(甚至控制器中沒有對應的動作),以預設方式呼叫render方法,也就是以預設的xxx.html.erb作為樣版回應,你也可以自行在動作中執行render方法(會將回應以字串作為方法的傳回值,通常作為檢視回應之用),如果自行呼叫過render方法,Rails後續就不會再呼叫render方法,一個請求/回應週期內,只能呼叫過一次render方法,否則會發生AbstractController::DoubleRenderError錯誤。
呼叫render方法後,會將呈現回應給客戶端,如果只是想檢視目前回應內容,可以呼叫render_to_string,這僅會就目前回應資訊,將呈現以字串傳回,而不會回應給客戶端。
如果不想使用樣版檔案回應,可以在呼叫render時給予參數。例如回應空白內容:
render :nothing => true
這會傳送HTTP狀態碼200以及相關標頭給客戶端,但沒有任何回應本體內容,你可以使用:text、:xml或:json傳回純文字、XML或是JSON格式。例如:
render :text => "This is a test!"
傳回的content-type是text/html; charset=utf-8,內容為指定的純文字。如果:
render :xml => @page
傳回的content-type是application/xml; charset=utf-8,內容為指定的XML,可以指定字串,如果指定為物件,會嘗試呼叫物件的to_xml方法取得XML內容。上例中,假設to_xml是產生的模型所定義的方法,則內容會是:
<page>
<id type="integer">1</id>
<title>Openhome</title>
<url>https://openhome.cc</url>
<description>Orzxxxxxxx</description>
<created-at type="datetime">2011-12-16T08:07:28Z</created-at>
<updated-at type="datetime">2011-12-18T09:17:43Z</updated-at>
</page>