Я обычно использую поле с именем deleted_at
, затем определяю метод модели archive
, который заполняет deleted_at
текущим временем и сохраняет. Тогда для модели по умолчанию устанавливается where('deleted_at IS NULL')
(или where{deleted_at == nil}
, если вы любите squeel , как я).
Я использую это для гораздо большего, чем мои пользовательские модели. У меня даже есть абстрагированная функциональность, поэтому в каждой модели я хочу архивировать, я просто делаю archived_by :deleted_at
в модели. Вероятно, в вашем приложении есть места, где вы должны проверить и посмотреть, архивирована ли / удалена запрошенная запись, но по большей части это простое и элегантное решение. Вернуть запись из списка удаленных / заархивированных файлов так же просто, как record.deleted_at = nil
(или record.archive(false)
/ record.unarchive
, если хотите).
Чтобы это работало на большой таблице, я рекомендую проиндексировать столбец deleted_at
.