Forum: Rails-ES Validar conjunto de registros dentro de array de Hashes

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ruben D. (Guest)
on 2007-05-19 02:24
(Received via mailing list)
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.
Daniel R. Troitiño (Guest)
on 2007-05-19 04:49
(Received via mailing list)
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).
This topic is locked and can not be replied to.