Skip to content

Commit a9d58c7

Browse files
committed
Merge pull request rails#19685 from vngrs/actionview_parent_layout_bug
fix for actionview parent layout bug
2 parents 041c2c8 + c51aa9f commit a9d58c7

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

actionview/lib/action_view/layouts.rb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,16 +315,25 @@ def _write_layout_method # :nodoc:
315315
name_clause
316316
end
317317

318-
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
319-
def _layout
320-
if _conditional_layout?
318+
if self._layout_conditions.empty?
319+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
320+
def _layout
321321
#{layout_definition}
322-
else
323-
#{name_clause}
324322
end
325-
end
326-
private :_layout
327-
RUBY
323+
private :_layout
324+
RUBY
325+
else
326+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
327+
def _layout
328+
if _conditional_layout?
329+
#{layout_definition}
330+
else
331+
#{name_clause}
332+
end
333+
end
334+
private :_layout
335+
RUBY
336+
end
328337
end
329338

330339
private

actionview/test/actionpack/controller/layout_test.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,14 @@ def hello
122122
end
123123
end
124124

125+
class ParentController < LayoutTest
126+
layout 'item'
127+
end
128+
129+
class ChildController < ParentController
130+
layout 'layout_test', only: :hello
131+
end
132+
125133
class OnlyLayoutController < LayoutTest
126134
layout 'item', :only => "hello"
127135
end
@@ -225,6 +233,12 @@ def test_absolute_pathed_layout
225233
get :hello
226234
assert_equal "layout_test.erb hello.erb", @response.body.strip
227235
end
236+
237+
def test_respect_to_parent_layout
238+
@controller = ChildController.new
239+
get :goodbye
240+
assert_template :layout => "layouts/item"
241+
end
228242
end
229243

230244
class SetsNonExistentLayoutFile < LayoutTest

0 commit comments

Comments
 (0)