Rails 3 - удаление пользователя, но сохранение контента? - PullRequest
0 голосов
/ 01 марта 2011

Я, кажется, попал в засолку.Я пытаюсь написать способ уничтожения пользователей, но при этом сохранить их контент.

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

Я собирался просто, вуничтожить, установить для внешнего ключа company_id значение nil в таблице пользователя.Однако, делая это, компания потеряет работу этого старого пользователя, чего не может случиться, так как информация заполняется от выполнения запросов к идентификатору компании.

Кто-нибудь задумывался о приятном маленьком способе обойти это?это с похожим дизайном БД?Или мне придется вернуться на круги своя, чтобы найти способ сделать это более эффективно.

Спасибо

Ответы [ 4 ]

3 голосов
/ 01 марта 2011

Шаблон "мягкого удаления", вероятно, самый простой подход. В этом сценарии вы добавляете поле с логической семантикой, которое означает, по сути, «активный» или «удаленный».

Чтобы минимизировать влияние на существующий код, вы можете скопировать существующие данные в новую таблицу с обновленной схемой и создать представление с тем же именем, что и у старой таблицы, включая только те записи, которые не помечены как удаленные; клиенты, которым не нужно было знать об «удаленных» пользователях, остались бы в блаженном неведении об этих записях.

3 голосов
/ 01 марта 2011

Это действительно больше проблема интерфейса, чем проблема модели данных. Чтобы быть уверенным, вы не должны на самом деле удалять / уничтожать пользователей, если вам нужно сохранить их информацию. Но если вам нужен способ удаления пользователей, а не просто сделать их неактивными, вы можете добавить еще один параметр для статуса «прекращено». Тогда это зависит только от того, как и где вы отображаете этих пользователей в интерфейсе (или, может быть, вы просто никогда их не отображаете).

1 голос
/ 01 марта 2011

Возможно, вы захотите оформить заказ действует как параноик , который мягко удаляет пользователей, просто устанавливая флаг удаления. Таким образом, строка остается в БД, но не отображается ни в каких общих результатах запроса.

0 голосов
/ 21 ноября 2012

Да можно оформить заказ

rails3_acts_as_paranoid - который позволяет скрывать и восстанавливать записи без их фактического удаления.

Это лучшая техника для вашего сценария.

...