Как удалить запись из всех таблиц, на которые она ссылается? - PullRequest
1 голос
/ 30 июля 2011

Доброе утро, приятель Overflowers,

Небольшая проблема с ассоциациями моделей.У меня есть следующие ассоциации моделей:

class Categorization < ActiveRecord::Base
  belongs_to :exhibit
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :categorizations
  has_many :exhibits, :through => :categorizations
  acts_as_indexed :fields => [:title]
  validates :title, :presence => true, :uniqueness => true 
end

class Exhibit < ActiveRecord::Base
  has_many :categorizations
  has_many :categories, :through => :categorizations, :source => :category
  acts_as_indexed :fields => [:title, :bulb]
  validates :title, :presence => true, :uniqueness => true
  belongs_to :foto, :class_name => 'Image'
end

Итак, по существу, Categorization заканчивается этими столбцами (метки даты / времени опущены): categorization_id, exhibit_id и category_id.

Моя проблема в том, что когда я удаляю приложение, его ссылка на таблицу категоризации не удаляется, что приводит к ошибке БД в моем представлении.Сначала я должен отменить назначение приложения в любой категории, а затем безопасно удалить его.Или (учитывая, например, что удаляемый экспонат имеет :exhibit_id=>'1'), когда я даю в rails console: Categorization.find_by_exhibit_id(1).destroy

Спасибо за любую помощь !!

1 Ответ

2 голосов
/ 30 июля 2011

Вы можете установить опции :dependent для ассоциаций, которым вы хотите, чтобы Rails следовал при удалении их родителей:

class Exhibit < ActiveRecord::Base
  has_many :categorizations, :dependent => :destroy
  ...
end
...