Desafío Latam
Uncategorized

Importando CSV desde el panel de control de active admin

Screenshot 2015 05 05 19.28.05

Screenshot 2015 05 05 19.28.05

Existe una gema muy útil que permite cargar de forma sencilla archivos CSV desde el panel de control de active admin, por regla general es muy fácil de utilizar, sólo tienes que crear un archivo CSV que en la cabecera tengan los campos que quieres guardar (tienen que coincidir con el modelo) y listo.

La gema se llama active_admin_import, para instalarla tenemos que agregar a nuestro gemfile

gem "active_admin_import" , '2.1.2'

y luego:

bundle

Entonces suponiendo que tenemos el modelo pedidos con id y nombre, tendríamos que crear el recurso pedido con activeadmin y agregar dentro de admin/pedido.rb y dentro del archivo tendríamos que poner:

active_admin_import

y luego crear un archivo .csv con la cabecera

id,producto
1,televisor
2,Ps4
3,Xbox1

el formato de CSV por defecto es sin espacios separadores entre la coma, o sea pone todo junto, eso no quiere decir que no puedas ocupar espacio, sólo que no debes agregarlo entre medio del símbolo coma.

Importando un csv de usuarios con devise.

En el caso de que quieras insertar usuarios que estén bajo devise es un poco más complejo, puesto que el password no es parte del modelo, lo que si tiene es un encrypted_password, entonces para poder guardar correctamente a los usuarios lo que vamos a hacer es modificar el CSV que está leyendo active_admin_import para cambiar los password por password encriptados, además tenemos que apagar las validaciones y sacamos el header para no confundir a active_admin con el cambio del nombre del campo de password a encrypted_password.

Aquí dejo un ejemplo de un usuario con devise que tiene email y password.


  active_admin_import validate: false,
    before_batch_import: proc { |import|
      import.csv_lines.count.times do |i|
        import.csv_lines[i][2] = User.new(password: import.csv_lines[i][2]).encrypted_password
      end
    },
    :template_object => ActiveAdminImport::Model.new(
        :hint => "file will be imported with such header format: 'email','name','password'",
        :csv_headers => ["name", "email", "encrypted_password", "cohort_id", "role"],
        csv_options: { col_sep: ","} 
    ),
    :timestamps=> true,
    :batch_size => 1000

Artículos relacionados

Carlos Gajardo | Del Colegio a Desarrollador de Software

Romina Díaz
8 años ago

¿Quién está usando React en Chile y el Mundo?

Fernando
6 años ago

Trabajos en programación que no deberías aceptar por ningún motivo

Carlos Gómez
1 año ago
Salir de la versión móvil