0

在我看来,我有几个复选框,我想发回一个被选中的数组。我通过自己编写 HTML 实现了这一点,但我想知道是否有办法使用FormBuilder#check_box.

我有什么工作

<%= form_with model: @dog, local: true do |my_form| %>
  <label>
    <input type="checkbox"
           name="dog[breeds][]"
           value="labrador">
    Labrador
  </label>
  <label>
    <input type="checkbox"
           name="dog[breeds][]"
           value="husky">
    Husky
  </label>
    <%= my_form.submit 'Save' %>
<% end %>

这完美地工作:params包含我所期望的。如果我选中“husky”框并提交,“breeds”数组包含“husky”:

"dog"=>{"breeds"=>["husky"]}

但我想知道是否有办法使用my_form.check_box它,而不是自己写出复选框 HTML。

我尝试过的FormBuilder#check_box

<%= form_with model: @dog, local: true do |my_form| %>
  <label>
    <%= my_form.check_box 'breeds[]', value: 'labrador'%>
    Labrador
  </label>
  <label>
    <%= my_form.check_box 'breeds[]', value: 'husky'%>
    Husky
  </label>
  <%= my_form.submit 'Save' %>
<% end %>

这不符合我的期望。在 中params,无论我选中哪个框,“breeds”数组始终为空:

"dog"=>{"breeds"=>[]}

有没有办法使用FormBuilder助手来做我想做的事情?

似乎真的应该有,但我无法在任何地方找到它。

4

1 回答 1

1

您应该可以这样做:

<%= form_with model: @dog, local: true do |my_form| %>
  <% ['labrador','husky'].each do |breed| %>
      <%= my_form.check_box :breeds, {multiple: true}, breed%>
      <%= my_form.label :breeds, breed.titleize %>
  <%end%>
  <%= my_form.submit 'Save' %>
<% end %>

的签名check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")

由于您使用的是表单生成器,因此object_name可以将其省略my_form

所以我们通过:

  • 方法:breeds
  • 以便options {multiple: true}它创建一个集合
  • checked_value是品种名称。

ActionView::Helpers::FormHelper#check_box文档

于 2020-06-08T19:48:18.597 回答