通常,如果我使用以下内容:
collection_check_boxes(:params,:tools,Tool.all, 'id', 'name') do |b|
b.label { b.check_box + b.text }
end
我会得到这样的东西:
<label for="params_tool_7">
<input id="params_tool_7" name="params[tools][]" type="checkbox" value="7" />
Hammer
</label>
<label for="params_tool_8">
<input id="params_tool_8" name="params[tools][]" type="checkbox" value="8" />
Screwdriver
</label>
有没有办法让它输出一个封装标签和输入的div,如下所示:
<div class="checkbox">
<label for="params_tool_7">
<input id="params_tool_7" name="params[tools][]" type="checkbox" value="7" />
Hammer
</label>
</div>
<div class="checkbox">
<label for="params_tool_8">
<input id="params_tool_8" name="params[tools][]" type="checkbox" value="8" />
Screwdriver
</label>
</div>
答案 0 :(得分:0)
我自己找到了解决方案。它有效,但我认为可能有更好的方法。
我使用表作为复选框的布局,因为其他2个&#34;组&#34;它旁边的复选框,所以每个都占用一个单元格。
代码是这样的(HAML):
%table
%tr
%th Options #1
%th Options #2
%th Options #3
%tr
%td
=collection_check_boxes(:params, :tools, Tool.all, :id, :name) do |b|
.checkbox=b.label { b.check_box + b.text }
%td
=collection_radio_buttons(:params, :boxes, Box.all, :id, :name) do |b|
.radio=b.label { b.check_box + b.text }
%td
=collection_check_boxes(:params, :colors, Color.all, :id, :name) do |b|
.checkbox=b.label { b.check_box + b.text }
所以,这有效地包装了每个标签&#39;和&#39;输入&#39;有一个div,在这种情况下,他们有一个&#39;复选框&#39;和&#39;电台&#39;类。它按照我的要求工作,但我在每一个上重复代码,理论上应该由助手解决,但我不太确定如何在代码中包含不应该的代码待评估。
无论如何,它现在有效,直到找到更优雅的解决方案。