I’m using the acts_as_taggable_on gem on a Rails (Ruby 1.9.3) project.
I provide a form to my admins to add 1..n tag(s) to list of resources (let’s say clients).
I didin’t find a way to do this in bulk.
Right now I’m looping on every client and add one tag then save the object.
This is hurting the server a lot when I’m trying on X thousand clients, eventually creating a timeout.
I was wondering if there is a way to apply a tag to an ActiveRecord collection or something. If this is documented I’m deeply sorry, but I can’t find somebody doing it anywhere.
I can see how to hack it by doing a custom SQL query all by myself, but I prefer to avoid hacking the gem like this, ofc.
Right now I’m doing something like this
Something like this
# 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
Thanks a lot for your time.
Extra: well, I need to be able to remove 1..n tag(s) to a collection too!
Inspired by Saverio answser, I finally extended ActiveRecord::Relation with add_tags and remove_tags methods.
Here is an example:
I created a Github repo for the patch, hope this can help!
Thanks for the help!