使用collection_check_boxes,是否可以定义一个div,它包含从中创建的标签和输入?

时间:2014-04-08 01:54:31

标签: ruby-on-rails-4

通常,如果我使用以下内容:

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>

1 个答案:

答案 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;类。它按照我的要求工作,但我在每一个上重复代码,理论上应该由助手解决,但我不太确定如何在代码中包含不应该的代码待评估。

无论如何,它现在有效,直到找到更优雅的解决方案。