Как уничтожить запись с HAS_MANY,: зависимый =>: уничтожить
-
28-09-2019 - |
Вопрос
Я построил Rail 3 AuditLog с помощью нескольких плагинов, которые хранят данные в таблице Auditlog со следующими полями для идентификации (Feeded_id, feeded_type)
Итак, в моем случае у меня есть фотоальбом, что Has_Many фотографии.
class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
Когда я удаляю фотоальбом (Id = 2), это очень хорошо работает, чтобы удалить все связанные с ними фотографии, но она не удаляет элементы из аудита, которые похожи на это: (feeded_id = 2, feeded_type = photoalbum)
Учитывая, что таблица Auditlog не имеет столбца «Photo_album_id», и не может, есть ли способ настроить зависимую> Destory с рельсами, чтобы удалить все связанные элементы в AuditLog, когда фотоальбом будет удален?
Спасибо, я знаю, что это немного сложнее, чем большинство. Спасибо за чтение через него!
Решение
Я думаю, что вы ищете, это сочетание
belongs_to :feeded, :polymorphic => true
в вашем аудитовом журнале класса и
has_many :logs, :as => :feeded, :dependent => :destroy
в вашем фотоальботе.
Если у вас нет класса, чтобы представлять журнал вашего аудита, вы сможете добавить belongs_to
к существующему классу (в ваших плагинах возможно?).
Я уверен, что я не на 100% о следующем: AS =>: Cyped, вам придется правильно назвать этот символ, и я не уверен, что ожидает Acciverecord, но belongs_to
Отношения будут искать feeded_id и feeded_type, поэтому, когда «родительский» объект является фотоальбом, он будет правильно присоединиться к photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum'
. Отказ Поскольку это не требует никаких изменений в вашей базе данных, все ваш существующий код должен продолжать работать.
Вы можете прочитать на Варианты для ассоциаций здесь.