Rails 使用 select2(和 simple_form)作为可标记

Posted

技术标签:

【中文标题】Rails 使用 select2(和 simple_form)作为可标记【英文标题】:Rails acts-as-taggable-on with select2 (and simple_form) 【发布时间】:2015-12-15 14:06:19 【问题描述】:

我想要一个 select2 下拉标签,我可以在其中选择多个现有标签并添加新标签。

我尝试了许多不同的方法,要么没有让 select2 框工作,要么只传递了一个值(最后一个)。

这是我得到的最接近的值(通过最后一个值):

<%= f.input :tag_list, collection: @model.tags.map  |t| t.name , input_html:  :style=> 'width: 300px', class: "taggable", data:  placeholder: "Tags"  %>

【问题讨论】:

【参考方案1】:

正如我之前提到的,普通的 select2 库现在只使用 select 输入类型,但在使用 select2-full 库时它确实适用于输入类型。

所以,这是解决问题的一种方法。

我仍然遇到只传递一个值的问题。 我实际上是从其中一个示例中复制/粘贴代码,这是错误的。 据说强参数应该包括:tag_list,这很明显,但实际上需要tag_list[]才能接受所有值。

现在就像一个魅力。

【讨论】:

您关于 tag_list[] 的观点对我来说至关重要——标签是以 ["a", "b", "c"] 等字符串数组的形式提交的,而不是像 " a, b, c"【参考方案2】:

为我工作:

咖啡脚本:

  $( ".tags" ).select2
    theme: "bootstrap",
    tags: true
    tokenSeparators: [',']

在视图中:

= f.input :tag_list, input_html:  class: 'tags', multiple: "multiple" , collection: @video.tag_list

重要的部分是multiple: "multiple"

当然,正如 Mitja 所说,不要忘记将 tag_list: [] 放入控制器的强参数中。

例如,如果您想在下拉菜单中将标签作为建议,您可以这样做:

= f.input :tag_list, input_html:  class: 'tags', multiple: "multiple" , collection: ActsAsTaggableOn::Tag.most_used(30), value_method: :name

【讨论】:

【参考方案3】:

试试这个,希望对你有用。

= f.input :tag_list, class: "taggable",data: options: @model.tags.map  |t| t.name  

$(".taggable").select2(
  tags: $('.taggable').data('options')
  width: "252px"
);

【讨论】:

不幸的是它没有帮助。似乎它必须是选择输入类型。所以我添加为::select,否则它只是一个普通的输入框。这样我现在得到下拉菜单,但有是和否选项,而不是我的标签。此外,它不是多选。 让我考虑一下。

以上是关于Rails 使用 select2(和 simple_form)作为可标记的主要内容,如果未能解决你的问题,请参考以下文章

使用 simple_form 和 cocoon 时无法让 select2 工作

Rails 5 和 select2 错误,select2 不是函数

在rails上使用select2 gem和acts_as_taggable gem

Rails 5,带有 Select2-rails 的简单表单

在 Rails 3.2.8 中使用 select2 gem 时 Sprockets::FileNotFound

select2 rails 下拉菜单无法正确呈现