Tengo un modelo de ActiveRecord que regresa true
de valid?
(y .errors está vacío), pero regresa false
de save()
. Si la instancia del modelo es válida, ¿cómo puedo averiguar qué está causando que el guardado falle?
91
Tengo un modelo de ActiveRecord que regresa true
de valid?
(y .errors está vacío), pero regresa false
de save()
. Si la instancia del modelo es válida, ¿cómo puedo averiguar qué está causando que el guardado falle?
Respuestas:
Revise todas sus devoluciones de llamada.
Tuve un problema como este en el que tenía un método "after_validate" que fallaba después de haber realizado un montón de cambios en el modelo. El modelo era válido pero "after_validate" devolvía falso, así que si usé
model.valid
decía verdadero, pero luego si lo guardaba me daba errores de validación (pasados de la devolución de llamada after_validate). Fue raro.Mire el seguimiento de la aplicación y debería poder ver qué línea de código está generando la excepción.
fuente
"Hey! That's MY fake leg!" # Believe it or not, this is important
. No es que yo haría eso. ;)true.tap { do_something }
Intente usar la versión bang
save!
(con un signo de exclamación al final) e inspeccione el error resultante.fuente
save!
puede aumentarActiveRecord::RecordInvalid
(ya que ejecuta validaciones) oActiveRecord::RecordNotSaved
eso es lo que querrá rescatar..save
fallas que no se deben a la validación. La calificación "menos insatisfactoria" se refiere a Rails, no a esta respuesta.Si
@user.save
(por ejemplo) regresafalse
, simplemente ejecute esto para obtener todos los errores:@user.errors.full_messages
fuente
Sí, solucioné este problema asegurándome de devolver verdadero en todas mis devoluciones de llamada before_ * y luego comienza a funcionar :)
fuente
El problema que tuve fue que me olvidé de agregar la validación al modelo.
class ContactGroup < ActiveRecord::Base validates_presence_of :name end
fuente