【问题标题】:rails how get label_tag to work when multiple (array) check_box_tag当多个(数组)check_box_tag 时,rails 如何让 label_tag 工作
【发布时间】:2013-06-02 18:13:35
【问题描述】:

我的 Rails 3.2.13 应用程序使用复选框数组(同一字段名称的多个可能值),带有标签:

%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 中的复选框为 params[:fruits] => ['apple', 'banana']

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails forms label


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        对于那些使用 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 %>
        

        【讨论】:

        • 也适用于 Rails 5.0。保持接近,但缺少标签上的“for”标识。
        猜你喜欢
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多