如果 rails 中不存在标签,则添加标签 rails

Adding a tag if it doesn't exist in rails chosen rails

我已经使用 chosen-rails 和 acts-as-taggable gem 实现了向 Rails 中的 post 添加标签的功能。如果标签不存在,我想通过让用户创建新标签来进一步增强功能。

form.html.slim

.form-group.text-center
        = f.label :tag_ids, "Tags"
        = f.collection_select :tag_ids, Tag.order(:name), :id, :name, {}, {multiple: true}

如果不存在,我需要添加一个新标签。

可以 Selectize.js、Acts_as_Taggable 和 SimpleForm:

首先,将您的输入从 collection_select 更改为普通字符串输入。 Selectize.js 会将所有值分隔到标记中的任何有逗号的地方。这是在幕后发生的,因此当人们添加标签时,它实际上是用您提供的任何定界符将一个长字符串插入到您的数据库中。然后您需要向该字段添加一个 id,以便您可以初始化 selectize,例如:

<%= f.input :nationalities, as: :string, placeholder: "Nationalities", input_html: { id: 'nationality-input'} %>

然后初始化selectize.js:

#The following line gets all tags ever posted for a user with the context 'nationalities' which we will use as options.
<%=nations = ActsAsTaggleOn::Tagging.includes(:tag).where(context: 'nationalities').uniq.pluck(:id, :name)
$(document).ready(function() {
 $('#nationality-input).selectize({
    delimiter: ',',
    persist: true,
    allowEmptyOption: false,
    options: [
       <% nations.each do |nat| %>
         {text: '<%=nat[1] %>', value: '<%=nat[1]%>' },
       <% end %>
    searchField: 'text',
    create: function(input) {
       return {
          value: input,
          text: input
     }
   } 
});
});

确保您 acts_as_taggable 设置正确并且相应的模型包含它。然后在您的控制器中,只需用逗号和全部保存整个字符串,并允许 selectize 自动在视图上重新格式化它。