我正在使用select2作为多重选择器。目前,这是在我的HTML文件中:
<%= form.select "page_request_set_ids", @multiautocomplete_set_options.unshift(""),
{}, id: "page-request-sets", multiple: true,
allowClear: true, data: {placeholder: "Start typing sets..."} %>
@multiautocomplete_set_options
是一个字符串数组。
当我稍后访问:page_request_set_ids
时,我输入的字符串就在那里,还有一个空字符串。
我尝试删除保留占位符的unshift("")
,但未删除:page_request_set_ids
中空白字符串的问题。
有什么想法吗?
答案 0 :(得分:2)
直接取自select
documentation:
<强>疑难杂症强>
HTML规范说当多个参数传递给select并且所有选项都被取消选择时,Web浏览器不会向服务器发送任何值。不幸的是,这引入了一个问题:如果用户模型具有许多角色并具有role_ids访问者,并且在编辑用户角色的形式中,用户从role_ids多选框中取消选择所有角色,则不会发送role_ids参数。所以,任何像
这样的质量分配习语@user.update(params[:user])
不会更新角色。
为了防止这种情况,帮助者在每次多次选择之前生成辅助隐藏字段。隐藏字段与多个选择和空白值具有相同的名称。
注意:客户端要么只发送隐藏字段(表示取消选择的多个选择框),要么只发送两个字段。这意味着结果数组始终包含空字符串。
如果您不希望帮助者生成此隐藏字段,您可以指定include_hidden: false
选项。
所以底线是添加:
include_hidden: false
答案 1 :(得分:0)
对我来说问题是我没有将'multiple:true'选项传递给我的erb / haml中的select_tag,并且只在初始化时在select2中设置选项。
确保两个地方都有选项。