Return 使用“form_with”的数组?
Return an array using `form_with`?
在我看来,我有几个复选框,我想发回一个已选中的数组。我通过自己编写 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
助手来完成我想做的事情?
好像真的应该有,但是一直找不到。
您应该可以这样做:
<%= 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
将是品种名称。
在我看来,我有几个复选框,我想发回一个已选中的数组。我通过自己编写 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
助手来完成我想做的事情?
好像真的应该有,但是一直找不到。
您应该可以这样做:
<%= 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
将是品种名称。