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

            validate_render_arguments(options, extra_options, block_given?)

            if options.nil?
              options = { :template => default_template, :layout => true }
            elsif options == :update
              options = extra_options.merge({ :update => true })
            elsif options.is_a?(String) || options.is_a?(Symbol)
              case options.to_s.index('/')
              when 0
                extra_options[:file] = options
              when nil
                extra_options[:action] = options
              else
                extra_options[:template] = options
              end

              options = extra_options
            elsif !options.is_a?(Hash)
              extra_options[:partial] = options
              options = extra_options
            end

            layout = pick_layout(options)
            response.layout = layout.path_without_format_and_extension if layout
            logger.info("Rendering template within #{layout.path_without_format_and_extension}") 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(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 options.include?(:json)
                json = options[:json]
                json = ActiveSupport::JSON.encode(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, options[:status], layout)
              end
            end
          end