使用jquery tokeninput和acts_as_taggable_on

时间:2011-11-21 15:27:13

标签: ruby-on-rails-3 acts-as-taggable-on jquery-tokeninput

我已经实现了这篇文章中概述的框架:How to use jquery-Tokeninput and Acts-as-taggable-on但有些困难。这是在使用适当的主题和ajax搜索预先填充的情况下工作,但是当我输入新标签时,当文本区域失去焦点时会立即删除它。我不确定我做错了什么。这是我的一些相关代码:

用户模型(标记):

class User < ActiveRecord::Base
[...]
# tagging
acts_as_tagger

项目模型(接受标记):

class Item < ActiveRecord::Base
attr_accessible :title, :tag_list

#tagging functionality
acts_as_taggable_on :tags

项目控制器:

def tags 
@tags = ActsAsTaggableOn::Tag.where("tags.name LIKE ?", "%#{params[:q]}%") 
 respond_to do |format|
  format.json { render :json => @tags.collect{|t| {:id => t.name, :name => t.name }}}
 end
end

在我的表格上:

<%= f.input :tag_list, :label => "Tags", :input_html => { :class => "text_field short", "data-pre" => @item.tags.map(&:attributes).to_json }, :hint  => "separate tags by a space"  %>

我的路线:

get "items/tags" => "items#tags", :as => :tags
resources :items 

[差不多!!!]

表单上的js [注意:元素的id是动态分配的]:

<script type="text/javascript">
$(function() {
  $("#item_tag_list").tokenInput("/art_items/tags", {
    prePopulate:       $("#item_tag_list").data("pre"),
    preventDuplicates: true,
    crossDomain: false,
    theme: "facebook"
  });
});
</script>

1 个答案:

答案 0 :(得分:3)

如果你仍想使用Jquery TokenInput并添加标签,可以采用不同的方法。

1。 这实际上来自我的同一个问题;最新答案:How to use jquery-Tokeninput and Acts-as-taggable-on

这可以进入你的控制器。

 def tags
    query = params[:q]
    if query[-1,1] == " "
      query = query.gsub(" ", "")
      Tag.find_or_create_by_name(query)
    end

    #Do the search in memory for better performance

    @tags = ActsAsTaggableOn::Tag.all
    @tags = @tags.select { |v| v.name =~ /#{query}/i }
    respond_to do |format|
      format.json{ render :json => @tags.map(&:attributes) }
    end
  end

This will create the tag, whenever the space bar is hit.

You could then add this search setting in the jquery script:

noResultsText: 'No result, hit space to create a new tag',

It's a little dirty but it works for me.

2。  看看这个人的方法:https://github.com/vdepizzol/jquery-tokeninput

他提出了自定义录入功能:

$(function() {
  $("#book_author_tokens").tokenInput("/authors.json", {
    crossDomain: false,
    prePopulate: $("#book_author_tokens").data("pre"),
    theme: "facebook",
    allowCustomEntry: true
  });
});

3。 不确定这一点,但它可能会有所帮助:Rails : Using jquery tokeninput (railscast #258) to create new entries


4。 这个似乎也是合法的:https://github.com/loopj/jquery-tokeninput/pull/219

我个人喜欢第一个,看起来最容易安装。