5

我将 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.

有任何想法吗?

4

2 回答 2

4

直接取自select 文档

明白了

HTML 规范说,当多个参数传递给 select 并且所有选项都被取消选择时,Web 浏览器不会向服务器发送任何值。不幸的是,这引入了一个陷阱:如果一个用户模型有许多角色并且有 role_ids 访问器,并且在编辑用户角色的表单中,用户从 role_ids 多选框中取消选择所有角色,则不会发送任何 role_ids 参数。所以,任何像

@user.update(params[:user])

不会更新角色。

为了防止这种情况,助手在每次多选之前生成一个辅助隐藏字段。隐藏字段与多选和空白值具有相同的名称。

注意:客户端要么只发送隐藏字段(代表取消选中的多选框),要么发送两个字段。这意味着结果数组总是包含一个空白字符串。

如果您不希望助手生成此隐藏字段,您可以指定include_hidden: false选项。

所以底线是添加:

include_hidden: false

于 2017-05-25T15:24:32.710 回答
0

对我来说,问题是我没有将 'multiple: true' 选项传递给我的 erb/haml 中的 select_tag,并且只在初始化时在 select2 中设置了该选项。

确保您在这两个地方都有选择。

于 2017-08-07T20:13:30.940 回答