Ruby部分块渲染乱序

时间:2017-08-30 01:50:17

标签: ruby ruby-on-rails-4 haml

我在模板中定义一个块并将其传递给部分并将其渲染为字符串但是调用部分内部的块似乎会渲染到模板上下文中?

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

输出

<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 个答案:

答案 0 :(得分:1)

这实际上是由于HAML内部的一个问题: http://haml.info/docs/yardoc/Haml/Engine.html

  

由于一些Ruby怪癖,如果scope是Binding或Proc对象并且给出了一个块,那么评估上下文可能不是用户期望的那样。

但是,这可以使用capture_haml帮助程序解决!

= capture_haml &row_block

你仍然可以使用

传递参数
= capture_haml arg1, arg2, &row_block