Какой лучший способ реализовать стиль отмены gmail в Rails? - PullRequest
15 голосов
/ 14 октября 2008

Я думаю, что важно иметь метод " undo " ala gmail при уничтожении записей вместо отображения раздражающего всплывающего окна, которое говорит: " Вы уверены? ».

Способ, которым я это реализовал, заключается в том, чтобы в модели был столбец метки времени «Удален_кат», который получает метку времени при вызове метода destroy

.
def destroy
  @foo = Foo.find(params[:id])
  @foo.update_attribute(:deleted_at, Time.now)
  ...
end

К возврат / отмена Я просто установлю тот же столбец на ноль

def revert
  @foo = Foo.find(params[:id])
  @foo.update_attribute(:deleted_at, nil)
  ...
end

Мне просто нужно добавить условие, чтобы отфильтровывать «удаленные» foos, когда я вызываю метод find. Возможно, установите cron или фоновую задачу, чтобы через некоторое время действительно уничтожить «удаленные» foos.

Работает для меня и прост в реализации, но мне интересно, есть ли лучший способ реализовать эту функцию? Может быть, есть плагин или гем, который обеспечивает это, о котором я не знаю?

Ответы [ 5 ]

4 голосов
/ 14 октября 2008

Действительно, есть некоторые плагины, которые можно найти на Agile Web Development .

Вот ссылки и резюме для плагинов, которые соответствуют вашему описанию:

  1. Действует как параноик : Сделайте ваши активные записи "параноидальными". Удаление их не приводит к удалению строки, но устанавливает поле delete_at. Поиск перегружен, чтобы пропустить удаленные записи.
  2. Действует как мягко удаляемое : Предоставляет возможность мягкого удаления моделей ActiveRecord.
0 голосов
/ 11 июля 2013

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

0 голосов
/ 14 октября 2008

схема ответственности

class Action
{
  Perform(context);
  Undo(context);
}
0 голосов
/ 14 октября 2008

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

0 голосов
/ 14 октября 2008

Здесь есть файл , который, кажется, делает то, что вам нужно, но лично я думаю, что должно быть что-то, что автоматически отфильтровывает удаленные записи, если вы специально не включите их. Таким образом, они действительно будут отображаться как удаленные, если вы не включите параметр или именованную область, которая включает их заново.

К сожалению, я не написал ни одного, и свободное время ограничено, но это не должно быть так сложно, не так ли?

...