Итак, я играл с acts_as_taggable_on
в активном администраторе, и по большей части все работает, как ожидалось.
Однако всякий раз, когда я ищу теги и добавляю к модели тег существующий, он, кажется, сохраняет его как идентификатор, а не как имя. Создание новых тегов возвращает имя в порядке, и когда я снова перехожу к редактированию объекта, теги остаются помеченными по имени. Но когда я пытаюсь добавить еще один тег, который уже существует в базе данных, он возвращает имя в форме и, кажется, сохраняет ОК, но когда я снова возвращаюсь, чтобы отредактировать onject, тег отображается как идентификатор, скорее чем имя.
In 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
In 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' } %>
Не могу понять, почему новые работают, а существующие нет.