2017-08-30 2 views
0

私はテンプレート内にブロックを定義し、それを部分に渡して文字列にレンダリングしますが、部分内のブロックを呼び出すとテンプレートコンテキストにレンダリングするように見えますか?Rubyの部分ブロックのレンダリングが正しくない

LIB/test.rb

class Test 
    def render(&block) 
    view = ApplicationController.new() 

    view.class_eval do 
     include ApplicationHelper 
    end 

    view.render_to_string(:partial => 'cool_partial', :locals => { 
     :block => block 
    }) 

    end 
end 

コントローラ/ action.haml

= @test_obj.render do |variable| 
    %td='hello-world' 

アプリ/ビュー/ _cool_partial.haml

%table 
    %tr 
    (0..5).each do |i| 
     block.call 

出力これが原因HAML内部問題に実際に

<td>hello-world</td> 
<td>hello-world</td> 
<td>hello-world</td> 
<td>hello-world</td> 
<td>hello-world</td> 
<table> 
    <tr></tr> 
    <tr></tr> 
    <tr></tr> 
    <tr></tr> 
    <tr></tr> 
</table> 

答えて

1

:何らかのRubyの癖に http://haml.info/docs/yardoc/Haml/Engine.html

、スコープは、結合またはPROCオブジェクトであり、ブロックが与えられた場合、評価コンテキストはユーザーが期待するものではない可能性があります。

ただし、これはcapture_hamlヘルパーで回避できます。あなたはまだ

= capture_haml arg1, arg2, &row_block 
で、あまりにものparamsを渡すことができ

= capture_haml &row_block 

関連する問題