微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/ruby/273322.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐