Je pense qu'il est important d'avoir un « undo » méthode ala gmail lors de la destruction des documents au lieu d'afficher un popup ennuyant qui dit: « Êtes-vous sûr? ».Quelle est la meilleure façon d'implémenter le style Gmail "Annuler" dans Rails?
La façon dont je l'ai mis en œuvre est d'avoir une colonne d'horodatage « de deleted_at » dans le modèle qui obtient horodaté lorsque méthode destroy est appelé
def destroy
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, Time.now)
...
end
Pour revert/undo Je vais vient de mettre la même colonne à zéro
def revert
@foo = Foo.find(params[:id])
@foo.update_attribute(:deleted_at, nil)
...
end
Je vais juste d'ajouter une condition pour filtrer « supprimé » foos quand je l'appelle la méthode de recherche. Peut-être définir une tâche cron ou 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 de mettre en œuvre cette fonctionnalité? Peut-être qu'il y a un plugin ou une gemme qui fournit cela que je ne connais pas?
Est-ce que vous vous souciez vraiment de sa suppression? Un drapeau n'est-il pas suffisant? –
Oui, je ne me soucie pas vraiment quand il a été supprimé pour l'instant, mais cette connaissance pourrait être utile sur toute la ligne. En tout cas je pense que les timestamps font un bon drapeau. – JasonOng
Je suis d'accord avec le sentiment général.Cependant, un problème possible en prévoyant des besoins comme celui-ci est que cela pourrait amener d'autres développeurs à chercher où cette information (horodateur) est actuellement utilisée. Quand il n'est pas réellement utilisé quelque part, il représente un fil lâche, ce qui est souvent frustrant et prend du temps pour les non-initiés. – Magne