Comment simplifier le processus de suppression logicielle avec Ruby on Rails?
Je veux avoir un modèle où j'ai besoin de soft supprimer un enregistrement et ne pas les afficher dans la recherche ou d'autres conditions lors de la recherche.
Je veux garder le modèle sans supprimer l'enregistrement. Comment aller à ce sujet?
source d'informationauteur Jey Geethan
Vous devez vous connecter pour publier un commentaire.
Essayer ce bijou : https://github.com/technoweenie/acts_as_paranoid - ActiveRecord plugin vous permettant de masquer et restaurer les dossiers sans les supprimer
Suffit d'utiliser une source de préoccupation dans les rails 4
Exemple ici
Deletable
Un rails de préoccupation pour ajouter douce supprime.
Très simple et flexible pour personnaliser/modifier
(Vous pouvez changer la suppression de la colonne de type timestamp et de modifier les méthodes d'appeler ActiveRecord touch ).
Meilleur endroit où vous voulez le code de contrôle ont pas des gemmes pour les tâches simples.
D'utilisation
Dans vos Tables ajouter une colonne booléenne is_deletable
Dans vos modèles
Des méthodes et des rappels disponibles:
Note:
Focus à l'Aide update_column ou touchez la si vous décidez d'utiliser une colonne de type timestamp.
Il suffit d'ajouter un champ booléen appelé
deleted
ou quelque chose à cet effet. Lorsque vous doux supprimer l'enregistrement venez de définir le champ de vrai.Lorsque vous faites une recherche juste ajouter que comme une condition (ou faire une portée pour elle).
La
default_scope
fonctionnalité dans ActiveRecord 3 rend cela facile, mais personnellement, je préfère le large variété de solutions standard qui peuvent être déposés dans le projet.acts_as_archive
en particulier est la meilleure solution pour la plupart de mes projets, car il se déplace rarement accessible supprimé des enregistrements à une table séparée, permettant à la table de base de rester petit et dans le serveur de base de données de la mémoire RAM.En fonction de vos besoins, vous pouvez également envisager de gestion des versions au lieu de la suppression logicielle.
Vous pouvez définir un module de cette
Puis dans votre classe, vous pouvez écrire quelque chose comme:
De sorte que vous avez à la fois douce supprimer et récupérer.
Vous appelez
user.delete
doux à supprimer un utilisateur. Ensuite, vous pouvez appeleruser.recover
pour définir le supprimé retour à faux de nouveau, et de le récupérer.Ont un coup d'oeil à rails3_acts_as_paranoid.
Utilisation:
Si vous utilisez Rails4, Essayez ce petit bijou : https://github.com/alfa-jpn/kakurenbo
Une fonction d'association de Kakurenbo est mieux que les autres gemmes.
je ne vais pas utiliser une valeur par défaut de la portée de cause si je veux obtenir tous les enregistrements, j'ai besoin de l'ignorer à l'aide de "with_exclusive_scope", qui à son tour est en désordre. la irait par l'ajout d'un 'deleted' champ booléen qui est défini lors de l'enregistrement est supprimé. Aussi, aurait ajouté des étendues d'obtenir les données selon la condition.
caisse Le remplacement d'un des Rails default_scope et Rails: Pourquoi est-with_exclusive_scope protégé? Les bonnes pratiques sur la façon de l'utiliser?
Ajouter une colonne à-dire le statut de votre tableau et sur la suppression d'enregistrements de mise à jour de la valeur de la colonne statut inactif.
et lors de l'extraction des enregistrements, ajouter une condition de statut != "inactif" dans la requête.
Pour les Rails 4 n'utilisez pas acts_as_paranoid (buggy pour les Rails 4), l'utilisation la paranoïa. Tout ce que vous avez à faire est d'ajouter un deleted_at colonne timestamp et comprennent acts_as_paranoia dans le modèle.
À partir de là, il suffit d'appeler
destroy
sur l'objet et tous les autres ActiveRecord les relations et la plupart des autres méthodes(comme :comte) exclut automatiquement la soft_deleted dossiers.