el @recibo.valid? esta para que corra la validacion y si hay algun error lo meta en @recibo.errors (asumi que pasaria eso, osea para que muestre todos los errores que hay)

Pasa que al hacer la validacion vacia el errors del objeto asi que no fallaba.

el ok = false esta para el if de abajo por que puede validar y no tener causa.