1

为了清理和考虑丑陋的观点,我想做以下事情:

1)在视图中:

= document_left_container do
 = document_information

2)在我的助手中:

  def document_left_container(&block)
    render partial: "/document_left_container", locals: { custom_block: block }
  end

   def document_information
    render partial: "document_information"
  end

3) 部分:

对于 document_left_container:

.foo
  = custom_block.call

对于文档信息:

.bar

4) 预期结果:

<div class='foo'>
  <div class='bar'>
  </div> 
</div>

5) 实际结果:

<div class='foo'>
</div>
<div class='bar'>
</div>

有谁知道我该怎么做才能让我的东西正常工作?

提前致谢,

4

3 回答 3

1

这是我保持干燥的方法:

=content_for(:document_information) do
  .bar

.foo
  =yield(:document_information)

这将产生

<div class='foo'>
  <div class='bar'>
  </div> 
</div>
于 2012-07-13T02:33:44.470 回答
0

我目前的解决方案是:

帮手:

def document_left_container(&block)
  content_for :document_left_container do
    block.call
  end
  render partial: "/document_left_container"
end

部分的:

.foo
  = yield :document_left_container

休息保持不变,我真的很想保持相同的结构。

仍然很好奇为什么我的原始代码失败了。

于 2012-07-13T07:39:04.260 回答
0

我认为您的原始代码失败了,因为您实际上是在调用渲染然后再次调用渲染。因此,您将一些东西压入堆栈,然后将其他东西压入堆栈。如果你这样做,我认为它会起作用。(虽然我没有测试过。)

def document_left_container(&block)
  capture_haml do 
    render partial: "/document_left_container", locals: { custom_block: block }
  end
end

 def document_information
  render partial: "document_information"
end
于 2012-07-13T18:40:27.067 回答