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 disparaître.
record = some_magic
record.destroy
record.is_destroyed? # => true
Quelque chose comme ca. Je sais que détruire gèle l'objet, donc gelé? sorte de travaux, mais y a-t-il quelque chose explicitement pour cette tâche?
Tu peux le faire.
Record.exists?(record)
Cependant, cela fera un hit sur la base de données qui n'est pas vraiment nécessaire. La seule autre solution que je connaisse est de faire un rappel comme l'IV l'a mentionné.
attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
self.destroyed = true
end
Et puis vérifiez record.destroyed
.
Cela arrive très bientôt. Dans le dernier Riding Rails post, il dit ceci:
Et enfin, ce n'est pas nécessairement lié à BugMash, mais José Valim - parmi des dizaines d'autres commits - a ajouté model.destroyed ?. Cette méthode astucieuse ne retournera true que si l'instance que vous regardez actuellement a été détruite avec succès.
Alors voilà. Bientôt disponible!
Alors que record.destroyed? fonctionne bien et retourne vrai ou faux, vous pouvez également DRY cela un peu et créer la condition if sur la ligne que vous appelez destroy dans votre contrôleur.
record = Object.find(params[:id])
if record.destroy
... happy path
else
... sad path
end
Sachez que ce message est un peu en retard dans le match. Mais si quelqu'un veut en discuter davantage, je joue! Note latérale: J'ai également eu une validation after_destroy sur mon modèle et pendant que cela fonctionnait, une méthode distincte pour quelque chose comme ça semble exagérée;)
destroy
ing un objet ne renvoie rien d'autre qu'un appel à freeze
(pour autant que je sache) donc je pense que frozen?
est votre meilleur choix. Votre autre option consiste à sortir de ActiveRecord::RecordNotFound
si vous avez fait quelque chose comme record.reload
.
Je pense que la tactique de Mike ci-dessus pourrait être la meilleure, ou vous pouvez écrire un wrapper pour ces cas mentionnés si vous voulez commencer à "faire des hypothèses".
À votre santé.
Sans en savoir plus sur la logique de votre application, je pense que c'est figé? est votre meilleur pari.
A défaut, vous pourriez certainement ajouter à vos modèles un attribut "détruit" que vous déclenchez dans les rappels et qui pourrait être vérifié si vous souhaitez une solution plus précise.