0

我有一個many-to-many關聯UserProject之間,加入ParticipationBefore_destroy:刪除多對多的關聯,除非association.size> 1

user實例被刪除我想刪除所有user.projectsuser.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

如何刪除用戶? – emrahbasman

+0

用'@ user.destroy'進行銷燬操作。 – Numbers

回答

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 

這種做法不僅刪除剛刪除的用戶孤立的項目,但可能會在纏綿任何其他孤兒項目的數據庫,以及。