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.