通过以下关系删除has_many中的对象:dependent => :摧毁Rails 3.2

时间:2012-05-04 18:05:51

标签: ruby-on-rails ruby database activerecord

我正在开发一个用户可以创建项目的Rails应用程序。有两种类型的用户AdminsCollaborators。管理员和协作者has_many :accounts, through: :account_users,其中account_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

当管理员用户删除帐户时,只删除联接表和用户表中的行,不删除他们的项目。

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

我怎么解决这个问题?

1 个答案:

答案 0 :(得分:4)

我没有看到项目协会,所以我认为你可以通过以下两种方式之一来实现:

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
  [...]
  belongs_to :admin
  has_many :account_users
  has_many :collaborators, through: :account_users
  has_many :projects, :dependent => :destroy
  [...]
end