将标签与acts_as_taggable_on合并为Rails gem

时间:2010-08-26 21:34:53

标签: ruby-on-rails tagging acts-as-taggable-on

我在我的Rails应用程序中使用acts_as_taggable_on,我想了解合并两个标签的最佳方法的建议。

例如,如果我有食物记录列表,有些标记为“奶酪”,有些标记为“牛奶”,那么将这些标记组合成单个“乳制品”标签的最佳方法是什么。我应该只找到标有“奶酪”和/或“牛奶”的所有记录,用新的“乳制品”标签标记这些记录,并删除“奶酪”和“牛奶”标签和标签,或者有​​更好的方法这样做?

我查看了gem的文档和规范,但我没有看到任何组合多个标签的专用方法。如果我按照上面提出的多步路线进行操作,如果其中一个步骤失败(如果某些记录没有标记为“乳制品”,那么我是否会冒任何标记搞乱的风险)原因和“奶酪”标签被“删除”?

1 个答案:

答案 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