Render a template. If the template was not compiled yet, it is done exactly
before rendering.
This method is instrumented as “!render_template.action_view”.
Notice that we use a bang in this instrumentation because you don’t want
to consume this in production. This is only slow if it’s being listened
to.
# File actionview/lib/action_view/template.rb, line 248
def render(view, locals, buffer = nil, implicit_locals: [], add_to_stack: true, &block)
instrument_render_template do
compile!(view)
if strict_locals? && @strict_local_keys && !implicit_locals.empty?
locals_to_ignore = implicit_locals - @strict_local_keys
locals.except!(*locals_to_ignore)
end
if buffer
view._run(method_name, self, locals, buffer, add_to_stack: add_to_stack, has_strict_locals: strict_locals?, &block)
nil
else
view._run(method_name, self, locals, OutputBuffer.new, add_to_stack: add_to_stack, has_strict_locals: strict_locals?, &block)&.to_s
end
end
rescue => e
handle_render_error(view, e)
end