    # File lib/action_controller/base.rb, line 864
          def render(options = nil, extra_options = {}, &block) #:doc:
            raise DoubleRenderError, "Can only render or redirect once per action" if performed?

            if options.nil?
              return render(:file => default_template_name, :layout => true)
            elsif !extra_options.is_a?(Hash)
              raise RenderError, "You called render with invalid options : #{options.inspect}, #{extra_options.inspect}"
            else
              if options == :update
                options = extra_options.merge({ :update => true })
              elsif !options.is_a?(Hash)
                raise RenderError, "You called render with invalid options : #{options.inspect}"
              end
            end

            response.layout = layout = pick_layout(options)
            logger.info("Rendering template within #{layout}") if logger && layout

            if content_type = options[:content_type]
              response.content_type = content_type.to_s
            end

            if location = options[:location]
              response.headers["Location"] = url_for(location)
            end

            if options.has_key?(:text)
              text = layout ? @template.render(options.merge(:text => options[:text], :layout => layout)) : options[:text]
              render_for_text(text, options[:status])

            else
              if file = options[:file]
                render_for_file(file, options[:status], layout, options[:locals] || {})

              elsif template = options[:template]
                render_for_file(template, options[:status], layout, options[:locals] || {})

              elsif inline = options[:inline]
                render_for_text(@template.render(options.merge(:layout => layout)), options[:status])

              elsif action_name = options[:action]
                render_for_file(default_template_name(action_name.to_s), options[:status], layout)

              elsif xml = options[:xml]
                response.content_type ||= Mime::XML
                render_for_text(xml.respond_to?(:to_xml) ? xml.to_xml : xml, options[:status])

              elsif js = options[:js]
                response.content_type ||= Mime::JS
                render_for_text(js, options[:status])

              elsif json = options[:json]
                json = json.to_json unless json.is_a?(String)
                json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
                response.content_type ||= Mime::JSON
                render_for_text(json, options[:status])

              elsif options[:partial]
                options[:partial] = default_template_name if options[:partial] == true
                if layout
                  render_for_text(@template.render(:text => @template.render(options), :layout => layout), options[:status])
                else
                  render_for_text(@template.render(options), options[:status])
                end

              elsif options[:update]
                @template.send(:_evaluate_assigns_and_ivars)

                generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(@template, &block)
                response.content_type = Mime::JS
                render_for_text(generator.to_s, options[:status])

              elsif options[:nothing]
                render_for_text(nil, options[:status])

              else
                render_for_file(default_template_name, options[:status], layout)
              end
            end
          end