Вопрос

I currently have a Vendor Model which acts as sort of a router for my users. This Vendor Model links up to locations that the vendor owns and campaigns as well.

Once a user is created, it is given a Vendor association which basically unlocks the locations and campaigns that pertain to that given Vendor.

Now, my question is, is there a way that when a Vendor is "Destroyed" that is can destroy all associated locations, campaigns and users linked to it? If not, is there a way to run a validation that if a Vendor is being destroyed to check the database for associations and not allow the action of destroy if it finds records?

The reason I ask is because if I destroy the Vendor, it leaves the users without locations and campaigns without an associated Vendor which basically crashes my application.

User Model

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

Location Model

belongs_to :vendor
has_many :campaigns

Campaign Model

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

Vendor Model

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
Это было полезно?

Решение

In short you can do something like this by using the dependent option on your assoication. Can use either:

:destroy - destroys every associated object calling their destroy method.

:delete_all - deletes every associated object without calling their destroy method.

Update

Taking your models into consideration you should do the following:

class Vendor < ActiveRecord::Base 

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

As stated above using the destroy option will destroy every associated object with that vendor.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top