简体   繁体   中英

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

I have implemented the functionality of adding tags to a post in Rails using chosen-rails and acts-as-taggable gems. I want to further enhance the functionality by making user to create new tag if it doesn't exist.

form.html.slim

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

在此处输入图片说明

I need to add a new tag if it doesn't exist.

Ok with Selectize.js, Acts_as_Taggable, & SimpleForm:

Firstly, change your input from collection_select to a normal string input. Selectize.js will separate all of the values into tags anywhere there is a comma. This happens behind the scenes so as people add tags, it's actually inserting a long string into your database with whatever delimiter you supply. Then you need to add an id to that field so you can initialize selectize such as:

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

Then initialize 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
     }
   } 
});
});

Make sure you have acts_as_taggable setup properly and that the corresponding model includes it. Then in your controller just save the whole string with commas and all and allow selectize to reformat it on views automagically.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM