gpt4 book ai didi

ruby-on-rails - 使用 acts_as_taggable_on 向大量对象添加 N 标签

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:29 24 4
gpt4 key购买 nike

我在 Rails (Ruby 1.9.3) 项目上使用 acts_as_taggable_on gem。我向我的管理员提供了一个表格,用于将 1..n 个标签添加到资源列表(比方说客户)。

我没有找到批量执行此操作的方法。现在我在每个客户端上循环并添加一个标签然后保存对象。当我在 X 千个客户端上尝试时,这对服务器造成了很大伤害,最终导致超时。

我想知道是否有办法将标签应用于 ActiveRecord 集合或其他东西。如果这被记录在案,我深​​感抱歉,但我找不到任何人在做这件事。

我可以通过自己执行自定义 SQL 查询来了解如何破解它,但我更愿意避免像这样破解 gem,ofc。

现在我正在做这样的事情

像这样

# Client.selection returns a clients collection
Client.selection.each do |client|
tags_to_add.each{|a| client.tag_list << a}
tags_to_remove.each{|a| client.tag_list.remove(a)}
client.save
end

非常感谢您的宝贵时间。

额外:好吧,我也需要能够从集合中删除 1..n 个标签!

最佳答案

直接使用标记模型。可以使用类似下面的东西(假设可标记对象属于同一类)

Tagging.transaction do
client_ids.each do |cid|
tag_ids.each do |tid|
values = ["Client".inspect, cid, tid].join(", ")
Tagging.connection.execute "INSERT INTO taggings (taggable_type, taggable_id, tag_id) VALUES (#{values}) ON DUPLICATE KEY UPDATE id=id"
end
end
end

删除就简单多了

Taggings.where(:taggable_type => "Client", :taggable_id => client_ids, :tag_id => tag_ids).delete_all

关于ruby-on-rails - 使用 acts_as_taggable_on 向大量对象添加 N 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642950/

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