在销毁或销毁所有关联之前检查? Rails 4

时间:2013-12-03 17:18:34

标签: validation ruby-on-rails-4 relation destroy

我目前有一个供应商模型,它可以作为我的用户的路由器。此供应商模型链接到供应商拥有的位置和广告系列。

创建用户后,会向其提供供应商关联,该关联基本上可以解锁与该供应商相关的位置和广告系列。

现在,我的问题是,当供应商被“销毁”时,有没有办法可以销毁所有关联的地点,广告系列和与之相关的用户?如果没有,是否有办法运行验证,如果供应商被销毁以检查数据库中的关联,并且如果找到记录则不允许销毁操作?

我问的原因是,如果我销毁供应商,它会使用户没有位置和广告系列而没有关联的供应商,这会导致我的应用程序崩溃。

用户模型

belongs_to :vendor #user can only have one vendor
has_many :locations, :through => :vendor
has_many :clients, :through => :vendor
has_many :campaigns, :through => :vendor  

位置模型

belongs_to :vendor
has_many :campaigns

广告系列模型

belongs_to :location
belongs_to :user
belongs_to :vendor
has_one :client

供应商模型

has_many :locations #vendor can own many locations 
has_many :clients #vendor can have many clients. Allows multiple employees to see client list
has_many :campaigns #vendor can have many campaigns. Allows multiple employees to see campaigns

1 个答案:

答案 0 :(得分:1)

简而言之,您可以通过使用dependent选项来执行此类操作。可以使用:

  

:destroy - 销毁调用其destroy方法的每个关联对象。

     

:delete_all - 删除每个关联的对象而不调用其destroy方法。

<强>更新

考虑您的模型,您应该执行以下操作:

class Vendor < ActiveRecord::Base 

  has_many :locations, dependent: :destroy
  has_many :clients, dependent: :destroy 
  has_many :campaigns, dependent: :destroy
end 

如上所述,使用destroy选项将销毁该供应商的每个关联对象。