Tengo un modelo de ActiveRecord que regresa truede valid?(y .errors está vacío), pero regresa falsede 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 truede valid?(y .errors está vacío), pero regresa falsede 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.validdecí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::RecordNotSavedeso es lo que querrá rescatar..savefallas 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_messagesfuente
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 endfuente