Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

175
Vistas
Intentar importar un archivo CSV activa una función que termina manipulando los datos importados a la base de datos

Como dice la pregunta, estoy tratando de importar un CSV con la siguiente función:

 def import_users path = Rails.root.join('somePath') CSV.foreach(path, headers: true) do |row| usr = User.new(row.to_hash) usr.skip_callbacks = true usr.save end puts "inserts on table users complete" end

Como puedes ver, es una función simple.

Tema:

Todas las columnas con los datos correctos se importan correctamente pero en la User Class se activa la password= function (setter) :

 class User < ApplicationRecord attr_accessor :skip_callbacks validates :password, presence: true, unless: :skip_callbacks def password= password self[:password] = hash_password password end private def hash_password password Digest::MD5.hexdigest "#{Digest::MD5.hexdigest password}#{salt}" end end

Esto hace que la columna de contraseña en la base de datos se vuelva a escribir con nuevos hashes como contraseñas , lo que impide el inicio de sesión porque los valores de la columna han cambiado. La columna de contraseña en la base de datos no contiene la misma información que en el archivo CSV.

Normalmente implementé un skip_callback para evitar password validation , pero parece que no funciona.

Realmente agradecería cualquier tipo de ayuda ya que he estado tratando de resolver esto durante un par de días y parece que no puedo entender por qué.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que desea agregar contraseñas a la base de datos tal cual sin hash, y las validaciones no tienen nada que ver con eso porque no cambiarán el comportamiento de la función password= . Puede parchearlo con otra variable de instancia como:

 class User < ApplicationRecord attr_accessor :skip_callbacks attr_accessor :skip_password_hashing validates :password, presence: true, unless: :skip_callbacks def password= password self[:password] = skip_password_hashing ? password : hash_password(password) end private def hash_password password Digest::MD5.hexdigest "#{Digest::MD5.hexdigest password}#{salt}" end end

y luego parchear la importación como:

 def import_users path = Rails.root.join('somePath') CSV.foreach(path, headers: true) do |row| usr = User.new(row.to_hash) usr.skip_password_hashing = true usr.save end puts "inserts on table users complete" end

No estoy seguro de si es una buena idea tener esta posibilidad en la aplicación implementada, pero debería funcionar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda