2015-07-27 2 views
2

J'ai suivi les instructions à https://github.com/mbleigh/acts-as-taggable-on/wiki et dans config/initializers/acts_as_taggable_on.rb J'ai misRuby on Rails: Comment supprimer les tags inutilisés avec acts-as-taggable-on?

ActsAsTaggableOn.remove_unused_tags = true 

Cependant, il ne fonctionne pas. J'ai également essayé ce qui suit semblable à d'autres gemmes:

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

Il n'a pas fonctionné non plus. Peut-être qu'il a besoin d'un module inclus? Toute aide serait grandement appréciée.

Répondre

1

C'était mon erreur. Je pensais qu'il supprimerait tous les tags existants où taggings_count vaut 0. Il les supprime lors de la suppression de la relation.

3

J'ai une tâche de rake.

# 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 

Je l'utilise quand j'en ai besoin.

OU

# 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 

Si vous avez besoin d'aller dans les deux sens. C'est-à-dire que vous jouez comme je l'ai fait et que vous en avez supprimé certains des tags et d'autres des taggings et que vous devez nettoyer les deux côtés.

+1

Cela fonctionne comme un charme, merci. – ddonche