2012-07-03 13 views
5

En ambos Rails 2 y Rails 3, si: autosave => true una asociación has_many, la colección se enlaza y guarda (: validate => false) en cada uno asociación de niños. ¿Porqué es eso? Necesitamos una devolución de llamada before_validation para ejecutar para ese objeto hijo, pero no lo hará, ya que es un guardado que se saltea la validación.has_many: autosave => true salta la validación al guardar niños

¿Cuál es una buena forma de evitar esto? ¿Y cuál es el propósito de saltarse las validaciones?

¡Cualquier ayuda sería muy apreciada! ¡Gracias!

Respuesta

6

Validaciones hacer obtener ejecutar. Hay una fase de validación y una de ahorro. AutoSave intenta hacer estas dos fases para los dos modelos al mismo tiempo. Entonces, al guardar el modelo padre, el modelo padre se valida y luego se valida el guardado automático. Después de la aprobación de las validaciones, se produce la fase de guardado que guarda el modelo principal y guarda el modelo hijo (pero omite la validación). La razón es porque la validación ya se ha ejecutado.

Me encontré con un problema cuando estaba tratando de construir el modelo hijo dentro del padre durante la devolución de llamada before_save. Por lo tanto, el objeto asociado no estaba allí para ser validado durante la fase de validación.

Cuestiones relacionadas