Ruby on rails 作为标记,在活动管理中选择2返回奇怪的结果
因此,我一直在active admin中玩Ruby on rails 作为标记,在活动管理中选择2返回奇怪的结果,ruby-on-rails,autocomplete,activeadmin,acts-as-taggable-on,select2-rails,Ruby On Rails,Autocomplete,Activeadmin,Acts As Taggable On,Select2 Rails,因此,我一直在active admin中玩作为标记的角色,大部分情况下,一切都按预期进行 但是,每当我搜索标记并将现有标记添加到模型时,它似乎会将其保存为ID,而不是名称。创建新标记会返回名称fine,当我再次编辑对象时,标记仍按名称进行标记。但是,当我尝试添加另一个标记时,该标记已经存在于数据库中,它以表单的形式返回名称,并且似乎保存为OK,但是当我再次返回编辑onject时,该标记显示为ID,而不是名称 在admin/gift.rb中: controller do def autocom
作为标记的角色,大部分情况下,一切都按预期进行
但是,每当我搜索标记并将现有标记添加到模型时,它似乎会将其保存为ID,而不是名称。创建新标记会返回名称fine,当我再次编辑对象时,标记仍按名称进行标记。但是,当我尝试添加另一个标记时,该标记已经存在于数据库中,它以表单的形式返回名称,并且似乎保存为OK,但是当我再次返回编辑onject时,该标记显示为ID,而不是名称
在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
<%= 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' } %>
在标记autocommlete.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;
}
});
});
});
在我的\u gift\u form.html.erb
中:
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
<%= 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
我现在可以吻你了。还感谢@RustComet提出了所有正确的问题