2012-09-28 31 views
7

estoy manteniendo base de código de alguien y que tiene algo como esto:Comprobar si el objeto ActiveRecord se destruye utilizando el valor .destroy() devuelven

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

Lo que hace destroy cambio? ¿Está bien probar así? La razón por la que estoy pidiendo es que traté de usar

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

y no hay mensajes de error, así que estoy confundido. Se da algo así como

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

No debería "Error al eliminar la parte del widget" en la parte else? – sheerun

+0

@sheerun, eso es lo que sospechaba, pero no pude encontrar ninguna documentación para ello – highBandWidth

Respuesta

5

Si no está seguro, puede usar destroyed? método. El valor de devolución de destroy no está documentado, pero devuelve solo el objeto destruido congelado (no puedes actualizarlo). No devuelve el estado de la acción de destrucción.

Aunque generalmente el objeto destructor siempre debe tener éxito, puede escuchar ActiveRecordError. Por ejemplo, Optimistic Locking puede generar ActiveRecord :: StaleObjectError en la destrucción de registros.

1

De acuerdo con Ruby on Rails API documentation, el método destroy devolverá el objeto que destruyó, pero en un estado congelado.

Cuando se congela un objeto, no hay cambios deben hacerse al objeto puesto que ya no se puede persistió.

Puede comprobar si un objeto se destruyó mediante object.destroyed?.

3

Como algunas personas mencionadas anteriormente, ese destroy no devuelve un valor booleano, sino que devuelve un objeto congelado. Y, además, actualiza el estado del objeto instancia en el que lo llamas. Así es como escribo el controlador:

@widget_part.destroy 

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