Как написать метод mark_as_deleted в Ruby on Rails? - PullRequest
2 голосов
/ 22 февраля 2011

Я хотел бы написать метод, который должен работать как метод destroy в любом контроллере Rails по умолчанию, но на самом деле не должен удалять данные. Скорее, он должен установить флаг или что-то, что я могу оценить в своих представлениях, чтобы эти данные больше не отображались.

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

Какой самый элегантный способ написания такого метода? Я использую Rails 3.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

Если все, что вы хотите сделать, это показать или скрыть данные, у меня будет логическое поле is_visible в базе данных.

Кроме того, вместо того, чтобы оценивать, по вашему мнению, показывать эти данные, я 'Я поместил эту логику в модель, в default_scope (доступно в рельсах 3).Итак, что-то вроде этого (при условии, что вы хотите показать / скрыть Articles) ...

# model
class Article < ActiveRecord::Base
  default_scope where(:is_visible => true)
end

Очевидно, ваш метод удаления должен просто установить is_visible логическое значение false и при создании он долженпо умолчанию true.

Тогда вам просто нужно быть осторожным, если ваши данные связаны с другими данными.В этом примере, если у вас Articles и у них Comments, возможно, вы не хотите, чтобы Comments отображался где-либо, если Article помечен как невидимый.

3 голосов
/ 22 февраля 2011

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

Что касается элегантности, это может быть не самым лучшим, но я просто создаю метод new_draft для типов контента,который создает новый объект с status, установленным на «черновик».Затем, когда пользователь публикует свой черновик, я вызываю метод post, который устанавливает status в "отправленный".После публикации, если пользователь удаляет свой элемент, я вызываю метод remove, который (как вы уже догадались!) Устанавливает status в значение «удалено».

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