Validar conjunto de registros dentro de array de Hashes


#1

Saludos amigos, tengo un pequeño problema al intentar validar un
conjunto de registros que no son instancias de ActiveRecord, pero se se
encuentran dentro de un Array, pinta algo asi:

[{:nombre=>“Juan”,:edad=>15},{:nombre=>“Ruben”,:edad=>25},{:nombre=>"",:edad=>20}]

Por ejemplo tengo ese conjunto de registros, y el ultimo tiene el
atributo nombre vacio, por lo tanto no me deberia grabar ninguno, eso
seria lo que necesito, verificar que todos sean validos y luego
grabarlos, pero si existe uno invalido, no deberia grabar ninguno.

Gracias!.
Ruben.


#2

On 5/19/07, Ruben Alexis D. removed_email_address@domain.invalid wrote:

Gracias!.
Ruben.

Si el array se llama personas y la clase ActiveRecord Persona:

personas.map { |p| Persona.new p }.all? &:valid?

Esa expresión devuelve true si todas las personas son validas, false
en otro caso.

Otra forma, y si tu base de datos lo permite, sería utilizando
transacciones:

Persona.transaction do
personas.each do |p|
Persona.create! p
end
end

Aquí hay que hacer el rescue ActiveRecord::RecordInvalid

Todas las personas incluidas hasta el momento de la invalida serían
descartadas por la base de datos, pero si todas son válidas la base de
datos guardaría los datos.

La elección depende de cuanto te gusta que trabaje la base de datos y
cuanto la aplicación (juraría que el resultado será exactamente el
mismo).