Question

grand tutoriel de Ryan Bates sur les attributs virtuels , comment Je vais à détruire une étiquette (non Tagging) si, une fois que l'article est détruit, cette étiquette n'est plus utilisé?

J'ai essayé de faire quelque chose comme ceci:

class Article < ActiveRecord::Base
   ...
   after_destroy :remove_orphaned_tags

   private

   def remove_orphaned_tags
     tags.each do |tag|
       tag.destroy if tag.articles.empty?
     end
   end
end

... mais cela ne semble pas fonctionner (les balises existent encore après l'article est supprimé, même si aucun autre article les utilise). Que dois-je faire pour y parvenir?

Était-ce utile?

La solution

Dans la méthode remove_orphaned_tags, ce qui est "tags" que vous faites un each sur?

Souhaitez-vous pas besoin comme Tag.all?

Autres conseils

JRL est correct. Voici le code approprié.

 class Article < ActiveRecord::Base
    ...
    after_destroy :remove_orphaned_tags

    private
    def remove_orphaned_tags
      Tag.find(:all).each do |tag|
        tag.destroy if tag.articles.empty?
      end
    end
 end

Je sais qu'il est trop tard, mais pour les personnes qui rencontrent le même problème, voici ma solution:

 class Article < ActiveRecord::Base
    ...
    around_destroy :remove_orphaned_tags

    private

    def remove_orphaned_tags
        ActiveRecord::Base.transaction do
          tags = self.tags # get the tags
          yield # destroy the article
          tags.each do |tag| # destroy orphan tags
            tag.destroy if tag.articles.empty?
          end
        end
    end

 end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top