为了清理和考虑丑陋的观点,我想做以下事情:
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
对于document_information:
.bar
4)预期结果:
<div class='foo'>
<div class='bar'>
</div>
</div>
5)实际结果:
<div class='foo'>
</div>
<div class='bar'>
</div>
有谁知道如何让我的东西工作?
提前致谢,
本
答案 0 :(得分:1)
以下是我如何保持干爽:
=content_for(:document_information) do
.bar
.foo
=yield(:document_information)
这将产生
<div class='foo'>
<div class='bar'>
</div>
</div>
答案 1 :(得分: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
休息保持不变,我真的想保持相同的结构。
仍然很想知道我的原始代码失败的原因。
答案 2 :(得分:0)
我认为您的原始代码失败了,因为您实际上是在调用render,然后再次调用render。所以你把东西推到了堆栈上,然后将其他东西推到了它上面。如果你这样做我认为它会起作用。 (虽然我没有测试过。)
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