Слияние тегов с activ_as_taggable_on гемом Rails - PullRequest
2 голосов
/ 27 августа 2010

Я использую acts_as_taggable_on в своем приложении на Rails, и я хотел бы получить совет о том, как лучше объединить два тега.

Например, если у меня есть список записей о продуктах питания, и некоторые из них помечены как «сыр», а некоторые - как «молоко», то как лучше всего объединить эти теги в один тег «молочный». Если я просто найду все записи с тегами «сыр» и / или «молоко», пометьте эти записи новым тегом «молочный» и удалите теги и теги «сыр» и «молоко», или есть лучший способ сделать это?

Я посмотрел в документации и спецификации драгоценного камня, и я не вижу ни одного специального метода, который бы объединял несколько тегов. Если я пройду многошаговый маршрут, который я предлагаю выше, рискну ли я испортить теги в случае сбоя одного из шагов (если по каким-либо причинам некоторые записи не будут помечены как "молочные" а теги "сыр" удаляются)?

1 Ответ

5 голосов
/ 29 августа 2010

Если вы хотите убедиться, что никакие теги не изменены, если все изменения не были успешными, используйте транзакцию базы данных. Код будет выглядеть примерно так:

Food.transaction do
  Food.tagged_with('milk', 'cheese').each do |food|
    food.tag_list -= ['milk', 'cheese']
    food.tag_list << 'dairy'
    food.save!
  end
end
...