@@ -12,6 +12,14 @@ def render_in(...)
12
12
module Overrides
13
13
class HelpersCalledBeforeRenderError < StandardError ; end
14
14
15
+ def partial ( *, **, &block )
16
+ if block
17
+ Phlex ::Rails ::Partial . new ( *, **) { capture ( &block ) }
18
+ else
19
+ Phlex ::Rails ::Partial . new ( *, **)
20
+ end
21
+ end
22
+
15
23
def helpers
16
24
unless @_context && ( view_context = @_context . view_context )
17
25
raise HelpersCalledBeforeRenderError . new ( "Do not use rails helpers until after the view has been rendered." ) unless view_context
@@ -28,26 +36,16 @@ def render(*args, **kwargs, &block)
28
36
renderable = args [ 0 ]
29
37
30
38
case renderable
31
- when Phlex ::SGML , Proc , Method , String
32
- return super
33
- when Class
34
- return super if renderable < Phlex ::SGML
35
- when Enumerable
36
- return super unless ActiveRecord ::Relation === renderable
37
- when nil
38
- partial = kwargs . delete ( :partial )
39
-
40
- if partial # this is a hack to get around https://github.com/rails/rails/issues/51015
41
- return raw (
42
- @_context . view_context . render ( partial , **kwargs ) do |*yielded_args |
43
- capture ( *yielded_args , &block )
44
- end
45
- )
46
- else
47
- return super
48
- end
39
+ when Phlex ::SGML , Proc , Method , String
40
+ return super
41
+ when Class
42
+ return super if renderable < Phlex ::SGML
43
+ when Enumerable
44
+ return super unless ActiveRecord ::Relation === renderable
49
45
end
50
46
47
+ return super if args . length == 0 && kwargs . length == 0
48
+
51
49
output = if block
52
50
@_context . view_context . render ( *args , **kwargs ) do |*yielded_args |
53
51
if yielded_args . length == 1 && defined? ( ViewComponent ::Base ) && ViewComponent ::Base === yielded_args [ 0 ]
0 commit comments