many-to-many
与User
之间有Project
关联,Participation
加入。
当user
实例被删除时,我想删除所有user.projects
和user.participations
如果没有其他user
与projects
相关联。
我尝试过以下操作,但似乎用户在方法运行时已经被破坏了:
before_destroy :destroy_all_projects_if_only_user
private
def destroy_all_projects_if_only_user
self.projects.each do |project|
unless project.users.size > 1
project.destroy
end
end
end
答案 0 :(得分:0)
听起来你要完成两件事:首先,破坏连接表中的关联,然后销毁相关对象,如果它们是孤立的。这是你可以做到的一种方式:
在您的用户模型中:
class User < ActiveRecord::Base
# clear all project associations for this user
before_destroy { projects.clear }
# clean up any orphaned projects in the database
after_destroy { Project.where("id NOT IN (SELECT project_id FROM participations)").destroy_all }
end
此方法不仅删除刚删除的用户的孤立项目,还删除可能在数据库中挥之不去的任何其他孤立项目。