Frage

Ich denke, es ist wichtig, ein " Rückgängig " Methode ala gmail zu haben, wenn Datensätze statt Anzeigen eines lästigen Popup zu zerstören, die sagt: „ Sind Sie sicher? “.

Die Art und Weise, die ich umgesetzt habe dies ist eine „deleted_at“ Timestamp-Spalte in dem Modell zu haben, die timestamped wird, wenn vernichten Methode wird aufgerufen,

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

Revert / Undo Ich werde nur die gleiche Spalte auf Null gesetzt

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

Ich werde nur eine Bedingung hinzufügen müssen abzufiltrieren „gelöscht“ Foos, wenn ich das find-Methode aufrufen. set Vielleicht einen Cron oder Hintergrundaufgabe, um wirklich zu zerstören „gelöscht“ Foos nach einiger Zeit.

Arbeiten für mich und einfach zu implementieren, aber ich bin neugierig, ob es ein besserer Weg, um diese Funktion zu implementieren? Vielleicht gibt es ein Plugin oder Juwel, das dies ermöglicht, die ich nicht kenne?

War es hilfreich?

Lösung

Es gibt in der Tat einige Plugins, die unter Agile Web Development .

Hier sind die Links und Zusammenfassungen für die Plugins, die scheint Ihre Beschreibung entsprechen:

  1. Fungiert als Paranoid : "paranoid" Machen Sie Ihre Active Rekorde sie zu löschen löscht die Zeile nicht, aber ein deleted_at Feld gesetzt. Zu Finden ist überlastet gelöschte Datensätze zu überspringen.
  2. Acts wie weich löschbar : Bietet die Möglichkeit, Soft Active Modelle löschen.

Andere Tipps

Es gibt eine Datei hier , das zu tun scheint was Sie benötigen, aber ich persönlich denke, es ist etwas da draußen, die automatisch herausfiltert Datensätze gelöscht werden müssen, wenn Sie speziell sie sind. Auf diese Weise würden sie scheinen wirklich gelöscht, wenn Sie einen Parameter oder einen benannten Bereich umfassen die wieder schließt sie.

Leider habe ich nicht eine schriftliche und freie Zeit ist begrenzt, aber es sollte nicht so schwer sein, sollte es?

Sie können die gelöschten Objekte in eine getrennte Sammlung (oder Tisch, oder was auch immer) bewegen - dann alles, was in der ursprünglichen Liste sieht werden sehen, dass es gelöscht ist schon, und Sie können mit der neuen Liste beschäftigen, wenn es bequem ist.

PaperTrail tut schön dieser. Es gibt eine gute Railscast auf sie, obwohl es ein wenig alt ist jetzt . Ich weiß, diese Frage gestellt wurde schon eine Weile her, aber ich stolperte über mich aus Neugier und dachte ich, das eine nette auf den neuesten Stand Art und Weise zu tun, verweisen.

Verantwortungskette Muster

class Action
{
  Perform(context);
  Undo(context);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top