在 Rails 中使用 acts_as_taggable_on 选择 2

select2 with acts_as_taggable_on in Rails

我正在尝试使用 select2 来标记我的标签。但是,我很难让它发挥作用。我尝试了很多东西,但似乎没有任何效果,谷歌搜索和插入其他人的解决方案对我没有用。我需要做什么才能使用 select2 和 acts_as_taggable_on 标记我的标签? 我希望用户能够选择标签或创建标签(如果标签不存在)。

我正在使用 Rails 5. 我正在使用 'select2-rails' gem.

我的模特:

class Event < ApplicationRecord
  belongs_to :user
  acts_as_commentable
  acts_as_taggable_on :tags
end

我的强参数:

def event_params
    params.require(:event).permit(:title, :description, :tag_list, tag_lists: [])
end

注意:我也试过 "tag_list: []"(单数)。我也试过不使用 "tag list: []"。当我删除“:tag_list”时,none 个标签被保存到数据库中。

我的看法:

<%= form_for @event do |f| %>

  <p>
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :text %><br>
    <%= f.text_area :description %>
  </p>

  <p>
  <%= f.label :tag_list, "Tags" %><br>
  <%= f.text_field :tag_list %>
  </p>
  <p>
    <%= f.submit %>
  </p>

<% end %>

注意:我已经在这里尝试了一些东西,但这就是我目前所处的位置。

我的js:

//= require jquery
//= require jquery_ujs
//= require select2
//= require turbolinks
//= require_tree .
//= require bootstrap

我的样式表:

/*
 *= require_tree .
 *= require_self
 *= require select2
 */

我在 events.coffee 中尝试过的事情:

$ ->
  $('#event_tag_list').select2 tags: []
  return

$('#event_tag_list').select2
  tags: true
  tokenSeparators: [',',' ']

注意:我尝试了更多的东西,但这是我用得最多的东西。

我想我会回答这个问题,以防有人遇到类似问题。它与 Rails 5 和 Turbolinks 的工作方式有关。浏览 RailsGuides 后,我发现问题是 Turbolinks 覆盖了正常的页面加载过程。我把gem换成了Bootstrap-Tokenfield,原理是一样的。这就是我修复 javascript:

的方法

$(document).on "turbolinks:load", ->
 $('#event_tag_list').tokenfield();

我的强参数:

def event_params
    params.require(:event).permit(:title, :description, :tag_list)
end

我的表格:

  <p>
    <%= f.label :tag_list, "Tags" %> <br>
    <%= f.text_field :tag_list, value: f.object.tag_list.to_s %>
  </p>

Rails向导说明:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#how-turbolinks-works