2014-04-08 58 views
2

通常情況下,如果我使用以下命令:使用collection_check_boxes,是否可以定義一個div,其中包含由它創建的標籤和輸入?

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

我自己找到了解決方案。它有效,但我認爲可能有更好的方法。

我使用表格作爲複選框的佈局,因爲旁邊有兩個複選框的其他「組」,所以每個複選框都有一個單元格。

的代碼是這樣的(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 } 

所以,這是有效地包裹每個「標籤」和「輸入」有一個div,在這種情況下,他們有「複選框」和'無線電'班。它按照我的要求工作,但是我重複每個代碼,理論上應該由幫助程序解決,但我不太確定如何在代碼中包含不應該被評估的代碼。

無論如何,它現在的作品,直到找到一個更優雅的解決方案。

相關問題