<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>render (ActionController::Base)</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" /> </head> <body class="standalone-code"> <pre><span class="ruby-comment cmt"># File lib/action_controller/base.rb, line 899</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">render</span>(<span class="ruby-identifier">options</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">extra_options</span> = {}, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment cmt">#:doc:</span> <span class="ruby-identifier">raise</span> <span class="ruby-constant">DoubleRenderError</span>, <span class="ruby-value str">"Can only render or redirect once per action"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">performed?</span> <span class="ruby-identifier">validate_render_arguments</span>(<span class="ruby-identifier">options</span>, <span class="ruby-identifier">extra_options</span>, <span class="ruby-identifier">block_given?</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:template</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">default_template</span>, <span class="ruby-identifier">:layout</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span> } <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:update</span> <span class="ruby-identifier">options</span> = <span class="ruby-identifier">extra_options</span>.<span class="ruby-identifier">merge</span>({ <span class="ruby-identifier">:update</span> =<span class="ruby-operator">></span> <span class="ruby-keyword kw">true</span> }) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Symbol</span>) <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">index</span>(<span class="ruby-value str">'/'</span>) <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span> <span class="ruby-identifier">extra_options</span>[<span class="ruby-identifier">:file</span>] = <span class="ruby-identifier">options</span> <span class="ruby-keyword kw">when</span> <span class="ruby-keyword kw">nil</span> <span class="ruby-identifier">extra_options</span>[<span class="ruby-identifier">:action</span>] = <span class="ruby-identifier">options</span> <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">extra_options</span>[<span class="ruby-identifier">:template</span>] = <span class="ruby-identifier">options</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">options</span> = <span class="ruby-identifier">extra_options</span> <span class="ruby-keyword kw">elsif</span> <span class="ruby-operator">!</span><span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>) <span class="ruby-identifier">extra_options</span>[<span class="ruby-identifier">:partial</span>] = <span class="ruby-identifier">options</span> <span class="ruby-identifier">options</span> = <span class="ruby-identifier">extra_options</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">layout</span> = <span class="ruby-identifier">pick_layout</span>(<span class="ruby-identifier">options</span>) <span class="ruby-identifier">response</span>.<span class="ruby-identifier">layout</span> = <span class="ruby-identifier">layout</span>.<span class="ruby-identifier">path_without_format_and_extension</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">layout</span> <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span>(<span class="ruby-node">"Rendering template within #{layout.path_without_format_and_extension}"</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">logger</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">layout</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">content_type</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:content_type</span>] <span class="ruby-identifier">response</span>.<span class="ruby-identifier">content_type</span> = <span class="ruby-identifier">content_type</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">location</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:location</span>] <span class="ruby-identifier">response</span>.<span class="ruby-identifier">headers</span>[<span class="ruby-value str">"Location"</span>] = <span class="ruby-identifier">url_for</span>(<span class="ruby-identifier">location</span>) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">:text</span>) <span class="ruby-identifier">text</span> = <span class="ruby-identifier">layout</span> <span class="ruby-value">? </span><span class="ruby-ivar">@template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">:text</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:text</span>], <span class="ruby-identifier">:layout</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">layout</span>)) <span class="ruby-operator">:</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:text</span>] <span class="ruby-identifier">render_for_text</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">else</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">file</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:file</span>] <span class="ruby-identifier">render_for_file</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>], <span class="ruby-identifier">layout</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:locals</span>] <span class="ruby-operator">||</span> {}) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">template</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:template</span>] <span class="ruby-identifier">render_for_file</span>(<span class="ruby-identifier">template</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>], <span class="ruby-identifier">layout</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:locals</span>] <span class="ruby-operator">||</span> {}) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">inline</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:inline</span>] <span class="ruby-identifier">render_for_text</span>(<span class="ruby-ivar">@template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">:layout</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">layout</span>)), <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">action_name</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:action</span>] <span class="ruby-identifier">render_for_file</span>(<span class="ruby-identifier">default_template</span>(<span class="ruby-identifier">action_name</span>.<span class="ruby-identifier">to_s</span>), <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>], <span class="ruby-identifier">layout</span>) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">xml</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:xml</span>] <span class="ruby-identifier">response</span>.<span class="ruby-identifier">content_type</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Mime</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-identifier">xml</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">:to_xml</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">to_xml</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">xml</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">js</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:js</span>] <span class="ruby-identifier">response</span>.<span class="ruby-identifier">content_type</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Mime</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-identifier">js</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:json</span>) <span class="ruby-identifier">json</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:json</span>] <span class="ruby-identifier">json</span> = <span class="ruby-constant">ActiveSupport</span><span class="ruby-operator">::</span><span class="ruby-constant">JSON</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-identifier">json</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">json</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>) <span class="ruby-identifier">json</span> = <span class="ruby-node">"#{options[:callback]}(#{json})"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:callback</span>].<span class="ruby-identifier">blank?</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">content_type</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Mime</span><span class="ruby-operator">::</span><span class="ruby-constant">JSON</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-identifier">json</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:partial</span>] <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:partial</span>] = <span class="ruby-identifier">default_template_name</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:partial</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">layout</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-ivar">@template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">:text</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">options</span>), <span class="ruby-identifier">:layout</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">layout</span>), <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-ivar">@template</span>.<span class="ruby-identifier">render</span>(<span class="ruby-identifier">options</span>), <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:update</span>] <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">:_evaluate_assigns_and_ivars</span>) <span class="ruby-identifier">generator</span> = <span class="ruby-constant">ActionView</span><span class="ruby-operator">::</span><span class="ruby-constant">Helpers</span><span class="ruby-operator">::</span><span class="ruby-constant">PrototypeHelper</span><span class="ruby-operator">::</span><span class="ruby-constant">JavaScriptGenerator</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@template</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-identifier">response</span>.<span class="ruby-identifier">content_type</span> = <span class="ruby-constant">Mime</span><span class="ruby-operator">::</span><span class="ruby-constant">JS</span> <span class="ruby-identifier">render_for_text</span>(<span class="ruby-identifier">generator</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:nothing</span>] <span class="ruby-identifier">render_for_text</span>(<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>]) <span class="ruby-keyword kw">else</span> <span class="ruby-identifier">render_for_file</span>(<span class="ruby-identifier">default_template</span>, <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:status</span>], <span class="ruby-identifier">layout</span>) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span></pre> </body> </html>