gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:04 25 4
gpt4 key购买 nike

这就是如何使用 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

应用程序.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(已解决)


必须有一行:

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

注意 - 您可以使用 @tags.map这里也一样,您也不必更改表格。

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

我有以下 Tag : {"id":1,"name":"Food"} .当我保存 Product , 已标记 "Food" , 它应该保存为 ID: 1当它搜索并找到名称 "Food" 时.目前,它保存了一个新的 Tag使用引用 "Food" 的新 ID ID,即 {"id":19,"name":"1"} .相反,它应该查找 ID、显示名称并执行 find_or_create_by。所以它不会创建一个新的 Tag .


问题 2(已解决)


当我去 products/show通过执行 <%= @product.tag_list %> 查看标签.名称显示为“Tags: 1”,而实际上它应该是“Tags: Food”。

我该如何解决这些问题?

最佳答案

您应该在 routes.rb 中定义一个路由,它应该处理 products/tags 路径。你可以这样定义它:

get "products/tags" => "products#tags", :as => :tags

因此应该为您提供一个 tags_path 帮助器,它应该评估为 /products/tags。这应该消除您在问题中提到的错误。请务必在 routes.rb

中定义 resources :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

关于ruby-on-rails - 如何使用 jquery-Tokeninput 和 Acts-as-taggable-on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com