J'ai un formulaire qui a beaucoup de contacts. Je veux être en mesure de supprimer les contacts sans vraiment les supprimer, mais en les marquant supprimés. J'ai ajouté un attribut "deleted" à ma table de contacts.rails implémentant l'attribut supprimé
Dans la plupart des cas, je veux un formulaires contacts Je veux que ceux qui ne sont pas supprimés:
form.contacts.find_all_by_deleted(false)
Cela semble désordre, donc je pensais d'un named_scope ou un default_scope, mais beaucoup de gens semblent disent qu'ils sont méchants.
J'ai aussi pensé à changer juste la relation sur le formulaire pour être (Est-ce le même que la portée par défaut est-il le mal?):
has_many :contacts, :conditions => ["deleted = false"]
À mon avis admin je dois être en mesure de voir tous les contacts. Je suppose que je peux juste faire une recherche du côté Contacts en ajoutant l'identifiant du formulaire.
On dirait que c'est quelque chose que les gens implémenteraient beaucoup et qu'il devrait y avoir une bonne entente sur les meilleures pratiques.
Toute solution doit fonctionner dans Rails 2 et ne pas être obsolète pour Rails 3. Préférez aucun plugin ou gemme.
Pourquoi préférez-vous ne pas utiliser une gemme? Pourquoi préféreriez-vous implémenter votre propre code, qui est plus de travail, moins testé, et moins de fonctionnalités? http://www.ruby-toolbox.com/categories/activerecord_soft_delete.html – ryeguy
Salut Ryeguy, les gemmes sont géniales si elles apportent une valeur significative, mais l'inconvénient est la maintenabilité du code. Pour une classe pour 1 problème, l'ajout d'un bijou semble trop pour moi. Si je le voulais sur tous mes modèles, ça en valait probablement la peine. Beaucoup de gemmes sont mal entretenues, le passage des versions des rails les brise, elles ont des conséquences inattendues. Nous prévoyons que cette base de code sera très largement déployée, nous essayons donc de limiter autant que possible les dépendances. En regardant les suggestions de KandadaBoggus ci-dessous, cela ressemble à 2 lignes de code vs une autre gemme. – Joelio