我有一个表单来创建一个设备,用于选择哪些用户拥有设备。因此,其中一个字段是选中用户的复选框:
<% User.all.each do |user| %>
<label class="checkbox-inline">
<%= f.check_box :user_ids, {:multiple => true}, user.id, nil %> <%= user.name %>
</label>
<% end >
它生成:
<input type="checkbox" value="1" name="device[user_ids][]" id="device_user_ids_1">
<input type="checkbox" value="2" name="device[user_ids][]" id="device_user_ids_2">
<input type="checkbox" value="3" name="device[user_ids][]" id="device_user_ids_3">
<input type="checkbox" value="4" name="device[user_ids][]" id="device_user_ids_4">
编辑对象时,如果我检查任何一个框,则使用其他参数将参数:user_ids
传递给控制器。但是如果我不检查任何框,如果我不想让任何用户当前链接到设备,那么当参数传递给控制器时,参数:user_ids
就不存在了。
如果选中“无复选框”,我该如何将"user_ids"=>[]
作为参数?
答案 0 :(得分:1)
您可以为表单内的复选框声明一个隐藏字段,当未选中复选框时,它将被发送为空
<%= f.hidden_field "device[user_ids][]", nil %>
然后
<% User.all.each do |user| %>
<label class="checkbox-inline">
<%= f.check_box :user_ids, {:multiple => true}, user.id, name: 'device[user_ids][]' %> <%= user.name %>
</label>
<% end >
希望能提供帮助