Как уничтожить запись с помощью has_many,: зависимый =>: уничтожить
Я создал Rail 3 AuditLog с помощью нескольких плагинов, которые хранят данные в таблице AuditLog со следующими полями для идентификации (feeded_id, feeded_type)
Так что в моем случае у меня есть фотоальбом, в котором есть много фотографий.
class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
когда я удаляю фотоальбом (id=2), это очень хорошо удаляет все связанные фотографии, но не удаляет элементы из AuditLog, которые выглядят следующим образом: (feeded_id = 2, feeded_type = PhotoAlbum)
Учитывая, что таблица AuditLog не имеет столбца "photo_album_id" и не может, есть ли способ настроить зависимое> Destory с Rails для удаления всех связанных элементов в AuditLog при удалении PhotoAlbum?
Спасибо, я знаю, что это немного сложнее, чем большинство. Спасибо, что прочитали это!
1 ответ
Я думаю, что вы ищете, это сочетание
belongs_to :feeded, :polymorphic => true
в вашем классе журнала аудита и
has_many :logs, :as => :feeded, :dependent => :destroy
в вашем классе фотоальбом.
Если у вас нет класса для представления журнала аудита, вы сможете добавить belongs_to
в существующий класс (возможно, в ваших плагинах?).
Я не уверен на 100% насчет опции:as =>:feeded, вам нужно будет правильно назвать этот символ, и я не уверен, чего ожидает ActiveRecord, но belongs_to
отношения будут искать feeded_id и feeded_type, поэтому, когда "родительским" объектом является фотоальбом, он будет корректно присоединяться к photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'
, Поскольку это не требует каких-либо изменений в вашей базе данных, весь ваш существующий код должен продолжать работать.
Вы можете прочитать о возможностях ассоциаций здесь.