2016-02-03 6 views
0

Я удаляю место, и он каскадирует строки PlaceUpload, но я также хотел бы каскадировать строки Match и TagCostumer, пока я удаляю Place. Как я могу это сделать?Каскадирование нескольких моделей

class Place < ActiveRecord::Base 
    has_many :place_uploads 
end 

class PlaceUpload < ActiveRecord::Base 
    belongs_to :place 
    has_many :matches 
    has_many :tags_customers 
end 

class TagsCustomer < ActiveRecord::Base 
    belongs_to :place_upload 
    belongs_to :tag 
end 

class Match < ActiveRecord::Base 
    belongs_to :place_upload 
    belongs_to :customer 
end 

ответ

0

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

class Place < ActiveRecord::Base 

    before_destroy :delete_children_objects 

    has_many :place_uploads, :dependent => :destroy 

    protected 

     def delete_children_objects 
      @places = PlaceUpload.where(place_id: id) 
      @places.each do |place| 
       TagsCustomer.where(place_upload_id: place.id).destroy_all 
       Match.where(place_upload_id: place.id).destroy_all 
      end 
     end 
end 
Смежные вопросы