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:
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.
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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.