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?
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.
"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.
save!
puede aumentar ActiveRecord::RecordInvalid
(ya que ejecuta validaciones) o ActiveRecord::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) regresa false
, simplemente ejecute esto para obtener todos los errores:
@user.errors.full_messages
El problema que tuve fue que me olvidé de agregar la validación al modelo.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end