Ruby on rails 删除具有多个直通关系的对象:dependent=>;:销毁Rails 3.2
我正在开发一个Rails应用程序,用户可以在其中创建项目。有两种类型的用户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
管理员
和合作者
。管理员和协作者都有许多:帐户,通过::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全部结束
。我需要做一些测试,但我认为它会起作用。我的解决方案有什么缺点吗?终止