Looks like you found your rails answer. Maybe I can help with the backbone side:
Backbone has 2 model constructs: The Model, and the Collection (the collection just being a list of models). There is no formal way of describing relationships with backbone (afaik), so you have to do it yourself. I think what I would do to handle this structure would be 3 collections:
ItemCollection
The item collection would hold all of your items, and each item would, in turn, have it's own TagCollection, which holds the tag models that are related to it.
ItemCollection.TagCollection
Holds references to the main TagCollection instance, but is a local list for this Item only. Since you can '.add' a model to a collection, then you can have multiple collections with the same models populating them.
TagCollection
The TagCollection holds your tags. It's the "main" list of tags that every ItemCollections TagCollection would reference.
For example: You have 3 tags in your TagCollection, and 2 items.
- item_1.TagCollection has tag_A and tag_B
- item_2.TagCollection has tag_A and tag_C
If, item_1 then has tag_C added to it, you would simply: item_1.TagCollection.add(tag_C) Similarly, removing: item_1.TagCollection.remove(tag_C) would remove it from item_1 collection, but not any others.
Regardless of the methods you utilize, you'll need to write some code in order to have it do mass updates / creates. Remember that backbone just passes the attribute list along as a JSON string in the body of the request when it does a sync. It doesn't care what it sends. So, so long as your controller was setup to accept a list (1 or more) on it's create method, you should be able to do this pretty simply by doing TagCollection.create([list of tags]). The difficult part would be to override the backbone sync to handle the successful creation, and turning [list of tags] into individual models for the collection.
Hope that helps!