Pregunta

gran tutorial de Ryan Bates en atributos virtuales , ¿cómo voy a destruir una etiqueta (no etiquetado) si, una vez que el artículo se destruye, que la etiqueta ya no se utiliza?

He intentado hacer algo como esto:

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

... pero eso no parece funcionar (todavía existen las etiquetas después de eliminar el artículo, a pesar de que ningún otro artículo de las usa). ¿Qué debo hacer para lograr esto?

¿Fue útil?

Solución

En el método de remove_orphaned_tags, lo que es "etiquetas" que se hacen una each en?

¿No te necesito como Tag.all?

Otros consejos

JRL es correcta. Aquí está el código apropiado.

 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

Sé que es demasiado tarde, pero para las personas que se encuentran con el mismo problema, esto es mi solución:

 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top