Ruby on Rails:如何使用acts-as-taggable-on删除未使用的标签?

时间:2015-07-27 06:55:00

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

我已按照https://github.com/mbleigh/acts-as-taggable-on/wiki上的说明进行操作,并在config / initializers / acts_as_taggable_on.rb中按照

进行操作
ActsAsTaggableOn.remove_unused_tags = true

然而它并没有奏效。我也尝试过类似于其他宝石的以下内容:

ActsAsTaggableOn.setup do |config|
  config.remove_unused_tags = true
end

它也没有用。也许它需要一个模块包括在内? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

我有一个佣金任务。

# lib/tasks/tag_cleaner.rake
# run using 'RAILS_ENV=development rake tag_cleaner:delete_unused'

namespace :tag_cleaner do
  desc "delete unused tags"
  task :delete_unused => :environment do
    ActsAsTaggableOn::Tag.joins(
      "LEFT JOIN taggings on taggings.tag_id = tags.id").where("taggings.id is null").delete_all
  end

end

我在需要时使用它。

OR

# lib/tasks/tag_cleaner.rake
# run using 'RAILS_ENV=development rake tag_cleaner:delete_unused'

namespace :tag_cleaner do
  desc "delete unused tags"
  task :delete_unused => :environment do
    ActsAsTaggableOn::Tag.joins(
      "LEFT JOIN taggings on taggings.tag_id = tags.id").where("taggings.id is null").delete_all
    ActsAsTaggableOn::Tagging.joins(
      "LEFT JOIN tags on tags.id = taggings.tag_id").where("tags.id is null").delete_all
  end
end

如果你需要双向进行。即你像我一样玩耍,并从标签中删除一些标签,并从标签中删除一些,并且需要清洁双方。

答案 1 :(得分:1)

这是我的错。我认为它会删除taggings_count为0的所有现有标签。它会在从关系中删除后删除它们。