RoR: Destruye asociación con has_many,: a través de si huérfano
-
20-09-2019 - |
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?
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