鉴于Ryan Bates's great tutorial on Virtual Attributes,如果文章被销毁后标签不再使用,我将如何破坏标签(不标记)?
我尝试过这样的事情:
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
...但这似乎不起作用(删除文章后标签仍然存在,即使没有其他文章使用它们)。我应该怎么做才能做到这一点?
答案 0 :(得分:3)
JRL是正确的。这是正确的代码。
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
答案 1 :(得分:2)
在remove_orphaned_tags
方法中,each
开启的“标记”是什么?
您不需要Tag.all
吗?
答案 2 :(得分:0)
我知道这太晚了,但对于遇到同样问题的人来说, 这是我的解决方案:
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