7

Ich Aufrechterhaltung Codebasis für jemanden, und sie haben so etwas wie dieses:Überprüfen Sie, ob Active Objekt zerstört wird mit der .Destroy() Rückgabewert

if @widget_part.destroy 
    flash[:message] = "Error deleting widget part" 
else 
    flash[:message] = "Widget part destroyed successfully" 
end 

Was destroy Rückkehr tut? Ist es in Ordnung, so zu testen? Der Grund, den ich frage, ist, dass ich versuchte,

zu benutzen, und es gibt keine Fehlermeldungen, also bin ich verwirrt. Es gibt so etwas wie

#<ActiveModel::Errors:0x00000103e118e8 @base=#<WidgetPart widget_id: 7, ..., 
    id: 67>, @messages={}> 
+0

Sollte nicht "Fehler löschen Widget Teil" in anderen Teil sein? – sheerun

+0

@sheerun, das war, was ich vermutete, aber ich konnte keine Dokumentation dafür finden – highBandWidth

Antwort

5

Wenn Sie nicht sicher sind, können Sie destroyed? Methode verwenden können. Rückgabewert von destroy ist undokumentiert, aber es gibt nur ein eingefrorenes zerstörtes Objekt zurück (Sie können es nicht aktualisieren). Es gibt den Status der Zerstörungsaktion nicht zurück.

Obwohl im Allgemeinen zerstören Objekt sollte immer erfolgreich sein, können Sie für ActiveRecordError hören. Zum Beispiel Optimistic Locking kann ActiveRecord :: StaleObjectError auf Datensatz zerstören.

1

Gemäß der Ruby on Rails API documentation wird die destroy Methode das Objekt, das Sie zerstört haben, aber in einem eingefrorenen Zustand zurückgeben.

Wenn ein Objekt eingefroren ist, sollten keine Änderungen am Objekt vorgenommen werden, da es nicht mehr persistent sein kann.

Sie können überprüfen, ob ein Objekt mit zerstört wurde.

3

Wie einige Leute oben erwähnt, gibt destroy keinen booleschen Wert zurück, stattdessen gibt es ein eingefrorenes Objekt zurück. Außerdem aktualisiert es den Status des Instanzobjekts, von dem Sie es aufrufen. Hier ist, wie ich den Controller schreiben:

@widget_part.destroy 

if @widget_part.destroyed? 
    flash[:success] = 'The part is destroyed' 
else 
    flash[:error] = 'Failed to destroy' 
end 
Verwandte Themen