首页 > 解决方案 > 如何在 Ruby on Rails 中动态创建复选框列表?

问题描述

我已经通过 SQL 查询(存储在 中)获得了一个名称列表,我可以在我的文件@name中遍历它们。.html.erb有没有办法在check_box_tag每个循环中动态创建一个唯一的 ID?例如,是否可以在每个循环中更新ind[1]以为每个 check_box_tag 提供唯一 ID?

<% @names.each_with_index do |n, index| %>
    <% n.each_with_index do |value, ind| %>
        <div class="checkbox">
            <%= check_box_tag :ind[1], true, @tags %>
            <%= label_tag :ind[1], value[1] %>
        </div>
        <% end %>
<% end %>

最终结果是我希望允许用户选中感兴趣的名称旁边的复选框。例如,如果我的 SQL 查询返回名称 Alice、Bob、John 和 Zach,并且用户选择 Bob 和 John,我想获得一个表示以下内容的数组(因为一系列布尔值 1 和 0 很好) :

{“爱丽丝”=>“假”,“鲍勃”=>“真”,“约翰”=>“真”,“扎克”=>“假”}

我发现了一个类似的问题,但我还没有设法让它为我工作:Ruby on Rails Forms: how to create a CheckBox Table (or List)

标签: ruby-on-railsloopscheckboxdynamic

解决方案


我设法让它使用以下代码:

<% @names.each_with_index do |n, index| %>
    <% n.each do |value| %>
        <div class="checkbox">
            <%= check_box_tag "name[#{index}]", true, @tags %>
            <%= label_tag "name[#{index}]", value[1] %>
        </div>
    <% end %>
<% end %>

<%= params.inspect %>在输出页面上使用来显示结果。以下是选择第二个和第三个选项后的参数:

<ActionController::Parameters {"utf8"=>"✓", "name"=>{"1"=>"true", "2"=>"true"}, "commit"=>"Save", "controller"=>"queries", "action"=>"custom_search"} permitted: false>


推荐阅读