class ViewComponent::Base

def render_in(view_context, &block)

Returns:
  • (String) -
def render_in(view_context, &block)
  self.class.__vc_compile(raise_errors: true)
  @view_context = view_context
  self.__vc_original_view_context ||= view_context
  @output_buffer = view_context.output_buffer
  @lookup_context ||= view_context.lookup_context
  # For content_for
  @view_flow ||= view_context.view_flow
  # For i18n
  @virtual_path ||= virtual_path
  # Describes the inferred request constraints (locales, formats, variants)
  @__vc_requested_details ||= @lookup_context.vc_requested_details
  # For caching, such as #cache_if
  @current_template = nil unless defined?(@current_template)
  old_current_template = @current_template
  if block && defined?(@__vc_content_set_by_with_content)
    raise DuplicateContentError.new(self.class.name)
  end
  @__vc_content_evaluated = false
  @__vc_render_in_block = block
  before_render
  if render?
    value = nil
    @output_buffer.with_buffer do
      rendered_template = render_template_for(@__vc_requested_details).to_s
      # Avoid allocating new string when output_preamble and output_postamble are blank
      value = if output_preamble.blank? && output_postamble.blank?
        rendered_template
      else
        safe_output_preamble + rendered_template + safe_output_postamble
      end
    end
    value
  else
    ""
  end
ensure
  @current_template = old_current_template
end