加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – acts_as_taggable_on和select2在Active Admin

发布时间:2020-12-17 03:32:14 所属栏目:百科 来源:网络整理
导读:所以我一直在主动管理员中使用acts_as_taggable_on,并且大部分内容都按预期工作. 但是,每当我搜索标签并将现有标签添加到模型时,它似乎将其保存为ID,而不是名称.创建新标签会返回正确的名称,当我再次编辑对象时,标签仍会被名称标记.但是当我尝试添加另一个已
所以我一直在主动管理员中使用acts_as_taggable_on,并且大部分内容都按预期工作.

但是,每当我搜索标签并将现有标签添加到模型时,它似乎将其保存为ID,而不是名称.创建新标签会返回正确的名称,当我再次编辑对象时,标签仍会被名称标记.但是当我尝试添加另一个已经存在于数据库中的标记时,它会返回表单中的名称,并且似乎保存正常,但是当我再次编辑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

在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,root: false }
end

对此:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读