2

Railsアプリでacts_as_taggable_onを使用していますが、2つのタグをマージするための最良の方法についてアドバイスが必要です。

たとえば、Foodレコードのリストがあり、「チーズ」のタグが付けられているものと「ミルク」のタグが付けられているものがある場合、これらのタグを1つの「乳製品」タグに組み合わせる最良の方法は何ですか。「チーズ」や「ミルク」のタグが付いたすべてのレコードを見つけたら、それらのレコードに新しい「乳製品」タグを付けて、「チーズ」と「ミルク」のタグとタグを削除する必要があります。これを行う?

gemのドキュメントと仕様を調べましたが、複数のタグを組み合わせる専用の方法はありません。上記で提案したマルチステップルートを使用する場合、いずれかのステップが失敗した場合(何らかの理由で「乳製品」と「チーズ」タグがタグ付けされないレコードがある場合)、タグ付けを台無しにするリスクがありますか?「削除されました)?

4

1 に答える 1

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
于 2010-08-28T22:12:53.957 に答える