module RailsCom::ActionView::TemplateRenderer

Public Instance Methods

render(context, options) click to toggle source
Calls superclass method
# File lib/rails_com/action_view/template_renderer.rb, line 6
def render(context, options)
  return super if defined?(WebConsole) && context.is_a?(WebConsole::View)

  # 默认Rails行为是: 在查找模板的时候,路径的优先级优于 format 的优先级;
  # 我们需要 formats 的优先级优于路径;
  request = context.request
  if request && request.format.symbol
    _formats = [request.format.symbol]
  else
    _formats = @lookup_context.formats[0..0].presence || [:html]
  end

  _formats += [:html] if _formats == [:turbo_stream]
  # todo better implement
  @lookup_context.send :_set_detail, :formats, _formats

  # 支持在views/:controller 目录下,用 _action 开头的子目录进一步分组,会优先查找该目录下文件
  context_prefix = @lookup_context.prefixes[0]
  action = (request&.params || {})['action']
  if context_prefix && context_prefix.split('/')[-1].start_with?('_') && action
    @lookup_context.prefixes[0] = [@lookup_context.prefixes[1], "_#{action}"].join('/')
  elsif context_prefix && action
    @lookup_context.prefixes.prepend [context_prefix, "_#{action}"].join('/')
  end

  # 当前 template 名称
  context.instance_variable_set(:@_rendered_template, options[:template])
  super
end