我在我的Rails应用程序中使用acts_as_taggable_on,我想了解合并两个标签的最佳方法的建议。
例如,如果我有食物记录列表,有些标记为“奶酪”,有些标记为“牛奶”,那么将这些标记组合成单个“乳制品”标签的最佳方法是什么。我应该只找到标有“奶酪”和/或“牛奶”的所有记录,用新的“乳制品”标签标记这些记录,并删除“奶酪”和“牛奶”标签和标签,或者有更好的方法这样做?
我查看了gem的文档和规范,但我没有看到任何组合多个标签的专用方法。如果我按照上面提出的多步路线进行操作,如果其中一个步骤失败(如果某些记录没有标记为“乳制品”,那么我是否会冒任何标记搞乱的风险)原因和“奶酪”标签被“删除”?
答案 0 :(得分:5)
如果要确保除非所有更改都成功,否则不会更改任何标记,请使用数据库事务。代码看起来像这样:
Food.transaction do
Food.tagged_with('milk', 'cheese').each do |food|
food.tag_list -= ['milk', 'cheese']
food.tag_list << 'dairy'
food.save!
end
end