在Rails中,如何处理多个已选中的复选框,只需拆分,或?

Bla*_*man 35 checkbox ruby-on-rails

好奇当用户检查多个复选框(具有相同的名称值)时处理情况的"轨道方式",并将其发布回控制器.

您如何检查是否选择了多个项目,然后在ID值上进行拆分等.

Mat*_*chu 56

最简单的方法是将这些复选框设置为一个数组.

HTML:

<input type="checkbox" name="tag_ids[]" value="1" />
<input type="checkbox" name="tag_ids[]" value="2" />
<input type="checkbox" name="tag_ids[]" value="3" />
Run Code Online (Sandbox Code Playgroud)

控制器:

tag_ids = params[:tag_ids]
Run Code Online (Sandbox Code Playgroud)

(当然,您可能form_for在视图中使用基于辅助的帮助程序,因此大量分配标记ID.这只是最通用的示例.)

  • 要获得此HTML,您可以执行`f.check_box:tag_ids,{multiple:true},1,nil`."nil"表示"没有隐藏的0输入".这种事情的记录很少. (9认同)
  • @Joe Van Dyk:如果在HTTP请求中没有提交名为`tag_ids []`的值,那么Rails就不会想把`tag_ids`放在`params`中.你必须自己解释,例如,`params [:tag_ids] || = []` (4认同)

Fly*_*ngV 21

f.check_box :tag_ids, {multiple: true}, 1, nil
Run Code Online (Sandbox Code Playgroud)

是正确的答案:

这就是原因,有一个'multiple:true'选项允许您将输入放在一个数组中.如果没有multiple:true选项,则不允许这样做.

  • nil 表示“没有隐藏的 0 输入”。 (2认同)

Nes*_*ric 7

这是一个视图和控制器的例子,例如多个清洁工可以在多个城市。

<%= form_for(@cleaner) do |f| %>
  <p>
    <%= f.label :cities %><br />
    <% for city in City.all %>
      <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %>
      <%=h city.name %><br />
    <% end %>
  </p>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

并在控制器中

def cleaner_params
  params.require(:cleaner).permit(city_ids: [])
end
Run Code Online (Sandbox Code Playgroud)

您可以找到有关执行此操作的“rails 方式”的完整教程https://kolosek.com/rails-join-table/