ruby-on-rails – 如何使用jquery-Tokeninput和Acts-as-taggable
这是您如何使用
jQuery Tokeninput和
ActsAsTaggableOn的自动完成功能.
在我的情况下,我使用一个嵌套的形式,但它不应该.下面的一切都是代码. 码 产品型号: 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%> ;.去产品/展示看标签.名称显示为“标签: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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |