aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/render/rendering.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_view/render/rendering.rb')
-rw-r--r--actionpack/lib/action_view/render/rendering.rb16
1 files changed, 15 insertions, 1 deletions
diff --git a/actionpack/lib/action_view/render/rendering.rb b/actionpack/lib/action_view/render/rendering.rb
index 1be5675e37..b92a03ddbd 100644
--- a/actionpack/lib/action_view/render/rendering.rb
+++ b/actionpack/lib/action_view/render/rendering.rb
@@ -88,12 +88,26 @@ module ActionView
# _layout:: The layout, if any, to wrap the Template in
def render_template(options)
_evaluate_assigns_and_ivars
- template, layout = options.values_at(:_template, :_layout)
+ template, layout = options.values_at(:_template, :layout)
_render_template(template, layout, options)
end
+ def _find_layout(template, layout)
+ begin
+ prefix = "layouts" unless layout =~ /\blayouts/
+ layout = find(layout, prefix)
+ rescue ActionView::MissingTemplate => e
+ update_details(:formats => nil) do
+ raise unless template_lookup.exists?(layout, prefix)
+ end
+ end
+ end
+
def _render_template(template, layout = nil, options = {})
+ self.formats = template.details[:formats]
+
locals = options[:locals] || {}
+ layout = _find_layout(template, layout) if layout.is_a?(String)
ActiveSupport::Notifications.instrument("action_view.render_template",
:identifier => template.identifier, :layout => layout.try(:identifier)) do