rails多个(数组)check_box_tag时如何使label_tag工作

时间:2013-06-02 18:13:35

标签: ruby-on-rails forms label

My Rails 3.2.13 app使用复选框数组(相同字段名称的多个可能值),带有标签:

%table
  %tr
    %td
      = check_box_tag 'fruits[]', 'apple'
    %td
      = label_tag 'fruits[apple]', 'I like Apples'
  %tr
    %td
      = check_box_tag 'fruits[]', 'banana'
    %td
      = label_tag 'fruits[banana]', 'I like Bananas'

表单正确地提交params中的复选框as params [:fruits] => ['apple','banana']

但是标签坏了 - 点击标签什么也没做。 (因为html标签的'= fruits_xxxx',但所有复选框的ID只是id ='fruits_',因此标签不与复选框相关联。)

如何以正确关联check_box_tag的方式指定label_tag? (我也尝试使用:标签标签的值,例如= label_tag 'fruits[]', I like Apples', :value => 'apple',但这也不起作用)

注意:我最接近的是使用标签标签的块格式(将标签放在标签内),就像标签下方一样,但是,使用块结构可以防止将复选框和标签放在单独的单元格中: / p>

= label_tag do
  = check_box_tag 'fruits[]', 'apple'
  I like Apples
= label_tag do
  = check_box_tag 'fruits[]', 'banana'
  I like Bananas

3 个答案:

答案 0 :(得分:7)

您可以将复选框属性作为第四个参数传递给check_box_tag方法。在这种情况下,您需要将id设置为label的“for”属性。

%td
  = check_box_tag 'fruits[]', 'apple', params[:fruits] && params[:fruits].include?('apple'), :id => 'fruits_apple'
%td
  = label_tag 'fruits_apple', 'I like Apples'

答案 1 :(得分:2)

如果您使用form_for,如果有人通过谷歌搜索来到这里是一个更正确的答案:

%td
  = f.check_box :fruits, { multiple: true }, 'apple'
%td
  = f.label :fruits, 'I like Apples', value: 'apple'

答案 2 :(得分:0)

对于那些使用Rails 6并在这里结束的人:

<% fruits.each_with_index do |fruit, idx| %>
  <%= f.check_box :fruits, {multiple: true, id: "fruit_#{idx}"}, fruit %>
  <%= f.label fruit, for: "fruit_#{idx}" %>
<% end %>