ruby-on-rails autocomplete activeadmin acts-as-taggable-on select2-rails

ruby on rails - acts_as_taggable_on y select2 devolviendo resultados extraños en Active Admin



ruby-on-rails autocomplete (1)

cambia esto:

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

a esto:

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

Así que he estado jugando con acts_as_taggable_on en el administrador activo, y en su mayor parte todo está funcionando como se esperaba.

Sin embargo, cada vez que busco etiquetas y agrego una etiqueta existente a un modelo, parece guardarla como ID, en lugar de como nombre. La creación de nuevas etiquetas devuelve el nombre correcto, y cuando voy a editar el objeto nuevamente, las etiquetas permanecen etiquetadas por el nombre. Pero cuando trato de agregar otra etiqueta, una que ya existe en la base de datos, devuelve el nombre en el formulario, y parece guardar OK, pero cuando vuelvo a editar la onject la etiqueta aparece como una ID, en lugar de que el nombre

En 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

En 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; } }); }); });

Y en mi _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'' } %>

No se puede averiguar por qué los nuevos están funcionando, pero las etiquetas existentes no lo están.