我最近问了一个类似的问题,尽管那是为了让多个块作为参数。这个问题更为直接。
我遇到的问题是,我有一个帮助方法,我希望能够将内容作为一个块传递给渲染。但是,如果我添加多个部分,则仅渲染块中的最后一个。方法如下。
def bootrap_panel(title, klass = 'primary', &block)
content_tag(:div, panel_heading(title) + panel_body(&block), class: 'panel panel-' + klass)
end
def panel_body(&block)
content_tag(:div, yield, class: 'panel-body') if block_given?
end
我遇到的一个问题的例子就是这里,只有最后一部分显示在页面上。
=bootrap_panel 'Panels', 'primary' do
- render "dynamic_panels/partials/new"
- render "dynamic_panels/partials/dynamic_panels", dynamic_panels: dynamic_page.dynamic_panels
我的第一个想法是,我应该首先让部分数组或某些东西,然后显示(我不确定我能够做到这一点)。其次,我使用' - '运算符而不是'='运算符来显示haml中的ruby内容。为什么呢?
答案 0 :(得分:3)
将块itsef而不是其返回值传递给content_tag:
<body>
<div id="container">
<div id="wrapper">
<div id="header">
<div id="banner">
<div id="logoDiv"></div>
<div id="titleDiv"></div>
</div>
<div id="navBar"></div>
</div>
<div id="content">
<div id="body"></div>
</div>
<div id="footer">
<div id="contactLinksDiv"></div>
</div>
</div>
</div>
</body>
其他方法:
content_tag(:div, class: 'panel-body', &block)