Ruby on rails 删除具有多个直通关系的对象:dependent=>;:销毁Rails 3.2

Ruby on rails 删除具有多个直通关系的对象:dependent=>;:销毁Rails 3.2,ruby-on-rails,ruby,database,activerecord,Ruby On Rails,Ruby,Database,Activerecord,我正在开发一个Rails应用程序,用户可以在其中创建项目。有两种类型的用户管理员和合作者。管理员和协作者都有许多:帐户,通过::account\u users,其中account\u users是一个联接表。当管理员删除他们的帐户时,我也想删除他们创建的帐户和它的项目,但我无法让它工作。我的模型目前如下所示: class Collaborator < User [...] has_many :account_users has_many :accounts, through

我正在开发一个Rails应用程序,用户可以在其中创建项目。有两种类型的用户
管理员
合作者
。管理员和协作者
都有许多:帐户,通过::account\u users
,其中account\u users是一个联接表。当管理员删除他们的帐户时,我也想删除他们创建的帐户和它的项目,但我无法让它工作。我的模型目前如下所示:

class Collaborator < User
  [...]  
  has_many :account_users
  has_many :accounts, through: :account_users
  [...]
end

class Admin < User
  has_many :account_users
  has_many :accounts, through: :account_users, :dependent => :destroy
  [...]
end 

class Account < ActiveRecord::Base
  [...]
  belongs_to :admin
  has_many :account_users
  has_many :collaborators, through: :account_users
  [...]
end


class AccountUser < ActiveRecord::Base
  belongs_to :admin
  belongs_to :account
  belongs_to :collaborator
end
类协作者:销毁
[...]
终止
类帐户
当管理员用户删除其帐户时,仅删除联接表和用户表中的行,而不删除其项目

注意,我使用Desive来处理身份验证


我怎样才能解决这个问题呢?

我没有看到项目关联,所以我想你可以通过以下两种方式之一来解决:

class Account < ActiveRecord::Base
   after_save :destroy_projects

   private
   def destroy_projects
      self.projects.delete_all if self.destroyed?
   end
end
类帐户

类帐户:销毁
[...]
终止

我没有看到项目关联,因此我认为您可以通过以下两种方式之一来实现:

class Account < ActiveRecord::Base
   after_save :destroy_projects

   private
   def destroy_projects
      self.projects.delete_all if self.destroyed?
   end
end
类帐户

类帐户:销毁
[...]
终止

您有一个混合哈希语法:
通过::account\u用户,:dependent=>:destroy
…最好选择一个或另一个您有一个混合哈希语法:
通过::account\u用户,:dependent=>:destroy
…最好选择一个或另一个。我在ActiveRecord关系中遇到同样的问题,因此我必须使用
self.other.destroy\u all
。谢谢,但我没有完全让它工作。问题不在于销毁帐户项目,而是管理员帐户(该公司可能是帐户的更好名称)。我尝试了您的第一种方法:
保存后:销毁账户
和,
def destroy\u accounts self.accounts.delete\u all if self.destromed?结束
。但是它不会销毁关联的帐户。我想我让它使用了与您的第一个建议非常类似的解决方案,但是我使用了before_destroy而不是after_save,并且在helper方法中做了一些小的更改:
def destroy_accounts accounts=self.accounts.where(“Account_owner='{self.id}'))accounts.destroy\u全部结束
。我需要做一些测试,但我认为它会起作用。我的解决方案有什么缺点吗?endI在ActiveRecord关系方面也遇到了同样的问题,因此我不得不使用
self.other.destroy\u all
销毁集合。谢谢,但我没有完全让它正常工作。问题不在于销毁帐户项目,而是管理员帐户(该公司可能是帐户的更好名称)。我尝试了您的第一种方法:
保存后:销毁账户
和,
def destroy\u accounts self.accounts.delete\u all if self.destromed?结束
。但是它不会销毁关联的帐户。我想我让它使用了与您的第一个建议非常类似的解决方案,但是我使用了before_destroy而不是after_save,并且在helper方法中做了一些小的更改:
def destroy_accounts accounts=self.accounts.where(“Account_owner='{self.id}'))accounts.destroy\u全部结束
。我需要做一些测试,但我认为它会起作用。我的解决方案有什么缺点吗?终止