Question Quel est le meilleur moyen d'implémenter le style gmail "annuler" dans Rails?


Je pense qu'il est important d'avoir un "annuler"méthode ala Gmail lors de la destruction d'enregistrements au lieu d'afficher une fenêtre contextuelle agaçante indiquant "Êtes-vous sûr?".

La manière dont je l'ai implémenté est d'avoir une colonne d'horodatage "deleted_at" dans le modèle qui est horodatée lorsque détruire la méthode s'appelle

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

À revenir / annuler Je vais juste mettre la même colonne à zéro

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

Je vais juste devoir ajouter une condition pour filtrer les foos "supprimés" lorsque j'appelle la méthode find. Peut-être définir une tâche cron ou d'arrière-plan pour vraiment détruire les foos "supprimés" après un certain temps.

Fonctionne pour moi et facile à mettre en œuvre, mais je suis curieux de savoir s'il existe une meilleure façon d'implémenter cette fonctionnalité? Peut-être y a-t-il un plugin ou une gemme qui fournit ce que je ne connais pas?


15
2017-10-14 08:21


origine


Réponses:


Il y a en effet des plugins qui peuvent être trouvés à Développement Web Agile.

Voici les liens et les résumés des plugins qui semblent correspondre à votre description:

  1. Agit comme Paranoïaque: Faites vos dossiers actifs "paranoïaques". Leur suppression ne supprime pas la ligne, mais définit un champ deleted_at. La recherche est surchargée pour ignorer les enregistrements supprimés.
  2. Agit comme délétable: Permet de supprimer en douceur les modèles ActiveRecord.

4
2017-10-14 16:31



Il y a un fichier ici cela semble faire ce que vous exigez, mais personnellement, je pense qu'il doit y avoir quelque chose qui filtre automatiquement les enregistrements supprimés, sauf si vous les incluez spécifiquement. De cette façon, ils sembleraient réellement supprimés, sauf si vous incluez un paramètre ou une étendue nommée qui les inclut à nouveau.

Malheureusement, je n'en ai pas écrit un et le temps libre est limité, mais cela ne devrait pas être si difficile, n'est-ce pas?


0
2017-10-14 08:46



Vous pouvez déplacer les éléments supprimés dans une collection distincte (ou une table, ou peu importe) - alors tout ce qui apparaît dans la liste d'origine verra qu'elle a été supprimée et vous pouvez gérer la nouvelle liste quand elle vous convient.


0
2017-10-14 15:08



Piste de papier le fait bien. Il y a un bon Railscast sur elle, même si c'est un peu vieux maintenant. Je sais que cette question a été posée il y a un certain temps, mais je suis tombée dessus par curiosité et j'ai pensé que je devrais faire référence à une bonne façon de faire.


0
2017-07-11 15:03



modèle de chaîne de responsabilité

class Action
{
  Perform(context);
  Undo(context);
}

-1
2017-10-14 08:48