Как уничтожить запись с HAS_MANY,: зависимый =>: уничтожить

StackOverflow https://stackoverflow.com/questions/4072919

Вопрос

Я построил 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'. Отказ Поскольку это не требует никаких изменений в вашей базе данных, все ваш существующий код должен продолжать работать.

Вы можете прочитать на Варианты для ассоциаций здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top