ruby-on-rails – 如何使用jquery-Tokeninput和Acts-as-taggable-on

这是您如何使用 jQuery TokeninputActsAsTaggableOn自动完成功能.

在我的情况下,我使用一个嵌套的形式,但它不应该.下面的一切都是代码.

产品型号:

attr_accessible :tag_list # i am using the regular :tag_list
acts_as_taggable_on :tags # Tagging products

产品控制器

#1. Define the tags path
  #2. Searches ActsAsTaggable::Tag Model look for :name in the created table.
  #3. it finds the tags.json path and whats on my form.
  #4. it is detecting the attribute which is :name for your tags.

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

路线:

# It has to find the tags.json or in my case /products/tags.json
get "products/tags" => "products#tags",:as => :tags

application.js中:

$(function() {
  $("#product_tags").tokenInput("/products/tags.json",{
    prePopulate:       $("#product_tags").data("pre"),preventDuplicates: true,noresultsText:     "No results,needs to be created.",animateDropdown:   false
  });
});

形成:

<%= p.text_field :tag_list,:id => "product_tags","data-pre" => @product.tags.map(&:attributes).to_json %>

第1期(SOLVED)

必须有行:

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

注意 – 您也可以在这里使用@ tags.map,您也不必更改表单.

以下是为什么需要这样做的2个问题:

我有以下标签:{“id”:1,“name”:“Food”}.当我保存产品时,标记为“食物”,它应该保存为ID:1,当它搜索并找到名称“食物”.目前,它使用引用“食物”ID(即{“id”:19,“name”:“1”})的新ID保存新标签.相反,它应该找到ID,显示名称,并做一个find_or_create_by,因此它不会创建一个新的标签.

第2期(SOLVED)

当我通过<%= @ product.tag_list%&gt ;.去产品/展示看标签.名称显示为“标签:1”,当它真的应该是“标签:食物”. 如何解决这些问题?

解决方法

您应该在route.rb中定义一条路由,该路由应该处理产品/标签路径.你可以定义它:
get "products/tags" => "products#tags",:as => :tags

因此应该给你一个tag_path帮助程序,它应该评估到/ products / tags.这应该摆脱你在问题中提到的错误.在定义资源之前,请确保添加此路由:route.rb中的product

现在到了acts-as-taggable-on,我没有使用这个gem,但是你应该看看方法all_tag_counts documentation.你的ProductsController#tags方法将需要对以下几行进行一些更改.我不知道它是否需要什么,因为我使用Mongoid并且不能测试它.

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...