87 votes

Vérifier si le dossier vient d'être détruit dans les rails

il y a donc

 record.new_record?
 

Pour vérifier si quelque chose est nouveau

Je dois vérifier si quelque chose est en train de sortir.

 record = some_magic
record.destroy
record.is_destroyed? # => true
 

Quelque chose comme ca. Je sais détruire détruit l'objet, tellement gelé? sorte de travail, mais y at-il quelque chose explicitement pour cette tâche?

215voto

Voldy Points 7388

Simplement fais-le:

 record.destroyed?
 

Les détails sont ici ActiveRecord :: Persistence

54voto

ryanb Points 11043

Tu peux le faire.

 Record.exists?(record)
 

Cependant, cela aura un impact sur la base de données, ce qui n'est pas vraiment nécessaire. La seule autre solution que je connaisse est de faire un rappel comme l’a mentionné le IV.

 attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
  self.destroyed = true
end
 

Et ensuite, vérifiez record.destroyed .

11voto

Steve Klabnik Points 1621

C'est à venir très bientôt. Dans la dernière Équitation Rails post, il est dit ceci:

Et enfin, c'est pas forcément BugMash, mais José Valim - parmi des dizaines d'autres commet ajoutée de modèle.détruits?. Cette chouette méthode retourne true seulement si l'instance vous êtes actuellement à la recherche a été avec succès détruit.

Donc là vous allez. À venir bientôt!

6voto

theIV Points 12999

destroy un objet ne renvoie rien d'autre qu'un appel à freeze (autant que je sache), donc je pense que frozen? est votre meilleur pari. Votre autre option est de sauver de ActiveRecord::RecordNotFound si vous avez fait quelque chose comme record.reload .

Je pense que la tactique ci-dessus de Mike pourrait être la meilleure, ou vous pouvez écrire un wrapper pour les cas mentionnés si vous voulez commencer à "faire des hypothèses".

À votre santé.

1voto

Mike Buckbee Points 3907

Sans en savoir plus sur la logique de votre application, je pense que figé? est votre meilleur pari.

Si vous ne le faites pas, vous pourriez certainement ajouter à vos modèles un attribut "détruit" que vous déclencherez dans les rappels et sur lequel vous pourriez vous appuyer si vous souhaitez une solution plus précise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X