RoRの:、has_manyのとの関連を破壊:孤立した場合に通過
-
20-09-2019 - |
質問
仮想属性の上ライアンベイツの偉大なチュートリアル、どのように考えるだろう私は、物品が破壊されると、そのタグは使用されなくなった場合には、タグ(タグ付けていない)を破壊しに行くの?
私はこのような何かをやってみました。
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
(記事は削除された後、他の記事では、それらを使用していないにも関わらず、タグがまだ存在する)...それが動作するようには思えません。私はこれを達成するために何をやるべき?
解決
あなたのremove_orphaned_tags
方法では、あなたが上each
を行う「タグ」とは何ですか?
あなたがTag.all
のような必要はありませんか?
他のヒント
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
私はそれがあまりにも遅知っているが、同じ問題に遭遇した人々のために、 これは私のソリューションです:
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
所属していません StackOverflow