Как сохранить пользователя даже после его удаления? - PullRequest
0 голосов
/ 23 ноября 2011

Допустим, у меня есть созданный пользователь, который оставляет некоторые комментарии на моем сайте, а затем я удаляю их, используя @ user.destroy.

Теперь, когда я отображаю комментарии, появляются ошибки, потому что @user равен нулю за комментарии, которые они написали.

Что было бы хорошим способом исправить это, учитывая, что:

  • Я все еще хотел бы иметь возможность удалять пользователей (хотя бы поверхностно)
  • Я бы хотел, чтобы у пользователя была возможность повторной регистрации с использованием тех же учетных данных.

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Я обычно использую поле с именем 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.

0 голосов
/ 23 ноября 2011

Другая идея, которая является более простой, состоит в том, чтобы поместить логическое поле, называемое trashable, и использовать значение для определения областей (как предложено @dhh https://gist.github.com/1015151).

Так что все, что вам нужно, это создать действие контроллера, которое выполняет @ user.trash! (Я бы положил удар на корзину), и пользователь «мягко удален».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...