Skip to content

Commit c66b655

Browse files
Merge pull request rails#50699 from jonathanhefner/follow-up-50665
Do not mask `NoMethodError` from within `render_in`
2 parents b83827a + 952a13b commit c66b655

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

actionview/lib/action_view/template/renderable.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ def identifier
1414

1515
def render(context, *args)
1616
@renderable.render_in(context)
17-
rescue NoMethodError
18-
raise ArgumentError, "'#{@renderable.inspect}' is not a renderable object. It must implement #render_in."
17+
rescue NoMethodError => error
18+
if error.name == :render_in
19+
raise ArgumentError, "'#{@renderable.inspect}' is not a renderable object. It must implement #render_in."
20+
else
21+
raise
22+
end
1923
end
2024

2125
def format

actionview/test/template/render_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,15 @@ def test_render_renderable_with_incompatible_object
312312
end
313313
end
314314

315+
def test_render_renderable_does_not_mask_nomethoderror_from_within_render_in
316+
renderable = Object.new
317+
renderable.define_singleton_method(:render_in) { |*| nil.foo }
318+
319+
assert_raises NoMethodError, match: "undefined method `foo' for nil" do
320+
@view.render renderable: renderable
321+
end
322+
end
323+
315324
def test_render_partial_starting_with_a_capital
316325
assert_nothing_raised { @view.render(partial: "test/FooBar") }
317326
end

0 commit comments

Comments
 (0)