2013-12-03 3 views
0

В настоящее время у меня есть модель поставщика, которая действует как своего рода маршрутизатор для моих пользователей. Эта модель поставщика связывается с местоположениями, которыми обладает и владеет поставщик, и кампаниями.Проверить перед уничтожением или уничтожением всех связанных? Rails 4

Как только пользователь создан, ему предоставляется ассоциация поставщиков, которая в основном разблокирует местоположения и кампании, относящиеся к данному Поставщику.

Теперь, мой вопрос: существует ли способ, когда поставщик «Разрушен», который может уничтожить все связанные с ним местоположения, кампании и пользователей, связанных с ним? Если нет, существует ли способ выполнить проверку того, что, если поставщик уничтожается, чтобы проверить базу данных для ассоциаций и не разрешить действие уничтожить, если он находит записи?

Причина, по которой я спрашиваю, заключается в том, что если я уничтожу Поставщика, он оставит пользователей без мест и кампаний без связанного с ними поставщика, который в основном сбой моего приложения.

пользователя Модель

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

Было бы хорошо, если бы вы могли разместить свои модели для этого. – David

+0

Добавлена ​​подробная информация о модели – RubyNewbie

ответ

1

Короче вы можете сделать что-то вроде этого, используя dependent опцию на вашем assoication. Может использовать либо:

: destroy - уничтожает каждый связанный объект, вызывающий метод уничтожения.

: delete_all - удаляет каждый связанный объект без вызова метода уничтожения.

Update

Принимая ваши модели во внимание, вы должны сделать следующее:

class Vendor < ActiveRecord::Base 

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

Как было указано выше, с помощью опции уничтожить уничтожит все объекты, связанные с этим поставщиком.

+0

Добавлена ​​подробная информация об изделии для уточнения – RubyNewbie

+0

Просмотреть Мое обновление должно обеспечить определенную ясность – David

+0

Beautiful! Ницца и просто. Благодаря! – RubyNewbie

Смежные вопросы