Select2 自动添加空白值

nhy*_*yne 5 ruby ruby-on-rails select2-rails

我将 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..."} %>
Run Code Online (Sandbox Code Playgroud)

@multiautocomplete_set_options是一个字符串数组。当我:page_request_set_ids稍后访问时,我输入的字符串和一个空字符串都在那里。

我试图删除unshift(""),它保留了我的占位符,但没有删除:page_request_set_ids.

有任何想法吗?

Pau*_*lgo 5

直接取自select 文档

陷阱

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

@user.update(params[:user])
Run Code Online (Sandbox Code Playgroud)

不会更新角色。

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

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

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

所以底线是添加:

include_hidden: false