【发布时间】:2012-09-20 12:17:33
【问题描述】:
我在 Rails (Ruby 1.9.3) 项目中使用acts_as_taggable_on gem。 我向我的管理员提供了一个表单,以将 1..n 个标签添加到资源列表(假设是客户端)。
我没有找到批量执行此操作的方法。 现在我在每个客户端上循环并添加一个标签然后保存对象。 当我在 X 千个客户端上尝试时,这对服务器造成了很大的伤害,最终导致超时。
我想知道是否有办法将标签应用于 ActiveRecord 集合或其他东西。如果记录在案,我深表歉意,但我在任何地方都找不到这样做的人。
我可以通过自己执行自定义 SQL 查询来了解如何破解它,但我更愿意避免像这样破解 gem。
现在我正在做这样的事情
类似的东西
# 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 个标签删除到集合中!
【问题讨论】:
-
您需要使用任何特定的顺序吗?您能否展示您现在使用的哪些 ruby 代码需要针对批量插入进行优化?
-
您的数据库是否支持批量插入?也就是说,它是否需要这样的命令:
INSERT INTO foo (field1, field2) VALUES (1, 1), (2, 2), (3, 3)。这种类型的插入一次添加所有行,但并非所有 DBMS 都支持。
标签: ruby-on-rails ruby bulk acts-as-taggable-on