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

Kai*_*des 3 ruby ruby-on-rails acts-as-taggable-on ruby-on-rails-4

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

ActsAsTaggableOn.remove_unused_tags = true
Run Code Online (Sandbox Code Playgroud)

然而它没有用。我也尝试过与其他宝石类似的以下操作:

ActsAsTaggableOn.setup do |config|
  config.remove_unused_tags = true
end
Run Code Online (Sandbox Code Playgroud)

它也不起作用。也许它需要包含一个模块?任何帮助将不胜感激。

Jay*_*een 5

我有一个耙子任务。

# 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
Run Code Online (Sandbox Code Playgroud)

当我需要的时候我就使用它。

或者

# 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
Run Code Online (Sandbox Code Playgroud)

如果你需要双向走。即,您正在像我一样玩耍,并且从标签中删除了一些,从标签中删除了一些,并且需要清理两侧。