【问题标题】:acts_as_taggable_on and select2 returning weird results in Active Adminact_as_taggable_on 和 select2 在 Active Admin 中返回奇怪的结果
【发布时间】:2014-09-03 22:10:21
【问题描述】:

所以我一直在活动管理员中使用acts_as_taggable_on,并且大部分情况下一切都按预期工作。

但是,每当我搜索标签并将 existing 标签添加到模型时,它似乎将其保存为 ID,而不是名称。创建新标签会很好地返回名称,当我再次编辑对象时,标签仍由名称标记。但是当我尝试添加另一个标签时,一个已经存在于数据库中的标签,它会在表单中返回名称,并且似乎可以保存,但是当我再次返回编辑对象时,标签显示为 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' } %>

无法弄清楚为什么新标签有效,而现有标签却无效。

【问题讨论】:

    标签: ruby-on-rails autocomplete activeadmin acts-as-taggable-on select2-rails


    【解决方案1】:

    改变这个:

    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 提出了所有正确的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多