Select2标签重新排序并且'充当'gem上的标签

时间:2013-09-17 19:29:13

标签: ruby-on-rails jquery-select2 acts-as-taggable-on

我的params散列中有一个选项列表,我使用select2重新排序:

"option_list"=>["3,1,2"]

enter image description here

不幸的是,这似乎对gem保存的标签的排序没有影响:

Style.last.options
=> [#<ActsAsTaggableOn::Tag id: 20, name: "1">, #<ActsAsTaggableOn::Tag id: 18, name: "2">, #<ActsAsTaggableOn::Tag id: 17, name: "3">] 

有谁知道如何强制重新排序? github的主要服务中断意味着我无法解释如何发挥可标记魔法的作用..

1 个答案:

答案 0 :(得分:1)

好的,Github回来了,现在我有了答案:

  

保留创建标记的顺序   的 acts_as_ordered_taggable

class User < ActiveRecord::Base
  # Alias for acts_as_ordered_taggable_on :tags
  acts_as_ordered_taggable
  acts_as_ordered_taggable_on :skills, :interests
end

@user = User.new(:name => "Bobby")
@user.tag_list = "east, south"
@user.save

@user.tag_list = "north, east, south, west"
@user.save

@user.reload
@user.tag_list # => ["north", "east", "south", "west"]

任何有兴趣复制此过程的人都可以执行以下操作:

<%= m.input :option_list, :label => "Options", :input_html => { :multiple => true } %>

(上面是simple_form DSL)

然后,对于你的JS,这将允许你粘贴逗号分隔的文本并让它自动标记化......并且能够拖放标签:

$("#style_option_list").select2({ width: '220px', tags:[], tokenSeparators: [","]})
$('body').on('paste', '.select2-input', function() {
  // append a delimiter and trigger an update
  $(this).val(this.value + ',').trigger('input');
});
$("#style_option_list").select2("container").find("ul.select2-choices").sortable({
    containment: 'parent',
    start: function() { $("#style_option_list").select2("onSortStart"); },
    update: function() { $("#style_option_list").select2("onSortEnd"); }
});

不要忘记add acts_as_ordered_taggable_on :options到你的模特