【发布时间】:2018-01-23 06:01:03
【问题描述】:
我有一个用于创建设备的表单,用于选择哪些用户将拥有设备。因此,其中一个字段带有选择用户的复选框:
<% 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"=>[] 作为参数?
【问题讨论】:
-
f.check_box生成什么代码?将其添加到您的帖子中。我认为 Railscheck_box生成器在复选框之前添加了<input type="hidden" name="user_ids">,以修复您的确切情况,即消失的参数错误。 -
我更新了问题。它产生了我所期待的......
-
如果没有选中任何复选框,则必须签入控制器并从设备对象中删除所有
user_ids -
@Subash 但是如果参数没有被传递,我如何在控制器中检查它?
-
@LuizHenrique 你可以通过
params[:device][:user_ids].length来查看是否选择了任何ID