Domanda

Penso che sia importante avere un " annulla " metodo ala gmail quando si distruggono i record invece di visualizzare un fastidioso popup che dice, " Sei sicuro? " ;.

Il modo in cui l'ho implementato è di avere un " delete_at " colonna timestamp nel modello che viene timestamp quando viene chiamato il metodo distruggere

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

Per ripristina / annulla imposterò la stessa colonna su zero

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

Dovrò solo aggiungere una condizione per filtrare " cancellato " foos quando chiamo il metodo find. Forse imposta un'attività cron o in background per distruggere veramente " cancellato " dopo qualche tempo.

Funziona per me e è facile da implementare ma sono curioso di sapere se esiste un modo migliore per implementare questa funzione? Forse c'è un plug-in o una gemma che fornisce questo che non conosco?

È stato utile?

Soluzione

Esistono davvero alcuni plugin che possono essere trovati su Sviluppo Web agile .

Ecco i collegamenti e le sintesi per i plugin che sembrano corrispondere alla tua descrizione:

  1. Agisce come paranoico : rendi i tuoi record attivi " paranoid. " La loro eliminazione non elimina la riga, ma imposta un campo delete_at. Trova è sovraccarico per saltare i record eliminati.
  2. Funziona come eliminazione soft : offre la possibilità di eliminare gradualmente i modelli ActiveRecord.

Altri suggerimenti

Esiste un file qui quello che stai richiedendo, ma personalmente penso che ci debba essere qualcosa là fuori che filtra automaticamente i record cancellati a meno che tu non li includa specificamente. In questo modo sembrerebbero davvero cancellati a meno che tu non includa un parametro o un ambito denominato che li includa nuovamente.

Purtroppo non ne ho scritto uno e il tempo libero è limitato, ma non dovrebbe essere così difficile, vero?

Puoi spostare gli elementi eliminati in una raccolta separata (o tabella, o qualsiasi altra cosa), quindi tutto ciò che appare nell'elenco originale vedrà che è stato eliminato e puoi gestire il nuovo elenco quando è conveniente.

PaperTrail lo fa bene. C'è un buon Railscast , sebbene sia un po 'vecchio ora . So che questa domanda è stata posta un po 'di tempo fa, ma mi sono imbattuto in esso per curiosità e ho pensato di fare riferimento a un modo aggiornato e aggiornato di farlo.

modello di catena di responsabilità

class Action
{
  Perform(context);
  Undo(context);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top