Рельсы удаляют записи в отдельную таблицу - PullRequest
0 голосов
/ 02 марта 2012

В Rails, когда запись должна быть удалена, я хочу сохранить отдельную таблицу для таких удаленных записей (которая по структуре будет аналогична первой).

Один из способов добиться этого - явно скопировать структуру, проверки и ассоциации из первой модели и вставить ее в модель удаленных элементов.Это, однако, приведет к большой избыточности кода и не будет масштабируемым решением.

Есть ли способ достичь этого в Rails без значительной (или любой) избыточности кода или решения, которое можетбыть более масштабируемым, чем упомянутый выше?

Я использую Ruby 1.9.3-p125 и Rails 3.2.

ОБНОВЛЕНИЕ

Я решил использовать дополнительный столбец is_deleted в таблице, однако я решил не делать этого, потому что не хотел, чтобы эта таблица становилась слишком большой и грязной из-за удаленных сообщений.Я не собираюсь по-настоящему получить доступ к этим удаленным сообщениям - они просто хранятся для ведения записей или архивирования.Добавление этого столбца также сделает доступ к этой таблице более медленным и, что более важно, я боюсь, что где-то пропущу проверку is_deleted == false в каком-то условии SQL - даже если я включу эту проверку в default_scope модели.

Ответы [ 3 ]

1 голос
/ 24 февраля 2014

Рекомендуется переместить их в отдельную таблицу, чтобы в основной таблице было меньше записей, а производительность не уменьшалась со временем.

Используйте Rails ActiveRecord Callback для удаления, т. Е.

before_destroy :move_to_trash
.
.
def move_to_trash
  Trash.create!(self)
end

Таким образом, при удалении записи ее копия будет создана в таблице корзины.

0 голосов
/ 02 марта 2012

Добавьте «удаленный» столбец в исходную таблицу.Задайте область действия модели по умолчанию, чтобы исключить удаленные записи.

0 голосов
/ 02 марта 2012

Ну, в общем, вы хотите вести записи, а не выбрасывать их. Поэтому вы можете просто пометить их как «удаленные» и настроить логику в своем коде, чтобы они не учитывали эти записи при их извлечении.

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