class Actor < ActiveRecord::Base
has_and_belongs_to_many :movies
before_destroy :remove_orphaned_initialize
after_destroy :remove_orphaned
private
def remove_orphaned_initialize
@instvariable = self.movies
end
def remove_orphaned
@instvariable.each do |m|
m.destroy if m.actors.empty? and m.titles.empty? ##movies also have habtm with Title
end
end
end
如果我删除了一个演员记录 那么孤儿电影不会被删除,因为@instvariable在remove_orphaned
中是nil你能解释一下我是如何实现它的。
如果我尝试在销毁之前调用remove_orphaned,那么m.actors将永远不会为空。 因为目前的医生实例尚未删除
答案 0 :(得分:0)
这是有问题的,因为没有任何演员的电影不是孤儿,它是没有孩子的父母。如果没有孩子的电影有问题,那么在将电影链接到演员之前创建电影在逻辑上是不可能的。
也许你可以根据电影中的counter_cache做一些事情来存储与它相关的演员数量,并在电影上进行after_update回调,这样如果计数器缓存设置为零则删除电影。不确定对counter_cache值的更改是否会触发after_update回调。
虽然听起来很奇怪。