我目前有一个供应商模型,它可以作为我的用户的路由器。此供应商模型链接到供应商拥有的位置和广告系列。
创建用户后,会向其提供供应商关联,该关联基本上可以解锁与该供应商相关的位置和广告系列。
现在,我的问题是,当供应商被“销毁”时,有没有办法可以销毁所有关联的地点,广告系列和与之相关的用户?如果没有,是否有办法运行验证,如果供应商被销毁以检查数据库中的关联,并且如果找到记录则不允许销毁操作?
我问的原因是,如果我销毁供应商,它会使用户没有位置和广告系列而没有关联的供应商,这会导致我的应用程序崩溃。
用户模型
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
答案 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选项将销毁该供应商的每个关联对象。