7

sto mantenendo base di codice di qualcuno e loro hanno qualcosa di simile:Controllare se l'oggetto ActiveRecord viene distrutto utilizzando il valore .destroy) di ritorno (

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

Che cosa significa destroy ritorno? Va bene per testare così? La ragione per cui ti sto chiedendo è che ho provato ad usare

flash[:message] = "Error deleting widget part : #{@widget_part.errors.inspect}" 

e non ci sono messaggi di errore quindi sono confuso. Dà qualcosa come

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

In caso contrario "Errore durante l'eliminazione di una parte di widget" si trova in un'altra parte? – sheerun

+0

@sheerun, questo è quello che sospettavo, ma non ho trovato alcuna documentazione per questo – highBandWidth

risposta

5

Se non siete sicuri, è possibile utilizzare destroyed? metodo. Il valore di ritorno di destroy non è documentato, ma restituisce solo oggetto distrutto congelato (non è possibile aggiornarlo). Non restituisce lo stato di azione di distruzione.

Sebbene l'oggetto generalmente distruttivo debba sempre riuscire, è possibile ascoltare ActiveRecordError. Ad esempio, Optimistic Locking può generare ActiveRecord :: StaleObjectError su record destroy.

1

In base allo Ruby on Rails API documentation, il metodo destroy restituirà l'oggetto che è stato distrutto, ma in uno stato bloccato.

Quando un oggetto è congelato, non è necessario apportare modifiche all'oggetto poiché non può più essere mantenuto.

È possibile verificare se un oggetto è stato distrutto utilizzando object.destroyed?.

3

Come alcune persone menzionate in precedenza, che destroy non restituisce un valore booleano, restituisce invece un oggetto congelato. Inoltre, aggiorna lo stato dell'oggetto istanza su cui viene chiamato. Ecco come scrivo il controller:

@widget_part.destroy 

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