ruby on rails - actions_as_taggable_on और select2 फिर से सक्रिय व्यवस्थापक में अजीब परिणाम लौट रहा है



ruby-on-rails autocomplete (1)

इसलिए मैं सक्रिय व्यवस्थापक में acts_as_taggable_on साथ चारों ओर खेल रहा हूं, और अधिकांश भाग के लिए अपेक्षित रूप से काम कर रहा है

हालांकि, जब भी मैं टैग खोजता हूं, और किसी मौजूदा टैग को किसी मॉडल में जोड़ता हूं, ऐसा लगता है कि यह नाम के बजाए इसे आईडी के रूप में सहेजता है। नए टैग्स का निर्माण ठीक नाम देता है, और जब मैं ऑब्जेक्ट को फिर से संपादित करता हूं, तब टैग्स को नाम से टैग किया जाता है। लेकिन जब मैं कोशिश करता हूं और दूसरा टैग जोड़ता हूं, जो डेटाबेस में पहले से ही मौजूद है, वह फॉर्म में नाम देता है, और ठीक से बचा रहा है, लेकिन जब मैं वापस संपादित करता हूं, तो फिर टैग को आईडी के रूप में दिखाया जाता है, बल्कि नाम से

admin/gift.rb :

controller do
  def autocomplete_gift_tags
    @tags = ActsAsTaggableOn::Tag
      .where("name LIKE ?", "#{params[:q]}%")
      .order(:name)
    respond_to do |format|
      format.json { render json: @tags , only: [:id, :name], root: false }
    end
  end
end

tag-autocomlete.js :

$(document).ready(function() {
  $('.tagselect').each(function() {
    var placeholder = $(this).data('placeholder');
    var url = $(this).data('url');
    var saved = $(this).data('saved');
    $(this).select2({
        tags: true,
        placeholder: placeholder,
        minimumInputLength: 1,
        initSelection: function(element, callback) {
            saved && callback(saved);
        },
        ajax: {
            url: url,
            dataType: 'json',
            data: function(term) {
                return {
                    q: term
                };
            },
            results: function(data) {
                return {
                    results: data
                };
            }
        },
        createSearchChoice: function(term, data) {
            if ($(data).filter(function() {
                return this.name.localeCompare(term) === 0;
            }).length === 0) {
                return {
                    id: term,
                    name: term
                };
            }
        },
        formatResult: function(item, page) {
            return item.name;
        },
        formatSelection: function(item, page) {
            return item.name;
        }
    });
  });
});

और मेरे _gift_form.html.erb :

<%= f.input :tag_list, label: "Tags", input_html: { data: { placeholder: "Enter tags",  saved: f.object.tags.map{|t| {id:  t.name, name: t.name}}.to_json, url: autocomplete_gift_tags_path }, class: 'tagselect' } %>

बाहर काम नहीं कर सकते हैं कि नए काम क्यों कर रहे हैं, लेकिन मौजूदा टैग नहीं हैं।


इसे बदलो:

respond_to do |format|
  format.json { render json: @tags , only: [:id, :name], root: false }
end

इसके लिए:

respond_to do |format|
  format.json { render :json => @tags.collect{|t| {:id => t.name, :name => t.name }}}
end




select2-rails