У меня есть приложение, в котором я бы хотел переопределить поведение destroy для многих моих моделей. Вариант использования заключается в том, что пользователи могут иметь законную потребность в удалении определенной записи, но фактическое удаление строки из базы данных приведет к уничтожению ссылочной целостности, которая затрагивает другие связанные модели. Например, пользователь системы может захотеть удалить клиента, с которым они больше не ведут бизнес, но транзакции с этим клиентом должны поддерживаться.
Кажется, у меня есть как минимум два варианта:
- Дублировать данные в обязательные модели, эффективно денормализуя мою модель данных, чтобы удаленные записи не влияли на связанные данные.
- Отмените поведение "уничтожить" ActiveRecord, чтобы сделать что-то вроде установки флага, указывающего, что пользователь "удалил" запись и использует этот флаг, чтобы скрыть запись.
Я пропустил лучший способ?
Вариант 1 кажется мне ужасной идеей, хотя мне бы хотелось услышать аргументы об обратном.
Вариант 2 кажется несколько Rails-ish, но мне интересно, как лучше справиться с этим. Должен ли я создать свой собственный родительский класс, который наследует от ActiveRecord:: Base, переопределить метод destroy там, а затем наследовать от этого класса в моделях, где мне нужно это поведение? Должен ли я также переопределять поведение искателя, поэтому записи, помеченные как удаленные, не возвращаются по умолчанию?
Если бы я сделал это, как бы я работал с динамическими искателями? Как насчет названных областей?