Pregunta

Soy bastante nuevo en Ruby on Rails, por favor, tenga paciencia conmigo :)

Estoy procesando un archivo .csv importado en Rails y quiero crear nuevos usuarios mediante programación (estoy usando la gema AuthLogic junto con el requisito de rol), hasta ahora estoy usando:

Línea de ejemplo:

Steve.Jobs@apple.com, Steve, Jobs, 555-APPLE

Código:

  def new_user(line)
    params = Hash.new
    params[:user] = Hash.new
    params[:user]["email"] = line[0]
    params[:user]["first_name"] = line[1]
    params[:user]["last_name"] = line[3]
    params[:user]["phone"] = line[4]
    user = User.new(params[:user])
    user.save
  end

El problema es que esto no agrega un nuevo usuario, lo intenta pero falla (DB Begin seguido de Rollback), asumo porque no estoy completando todos los campos, como inicio de sesión, contraseña, etc.

¿Tengo que generar explícitamente valores para estos campos?

¿Fue útil?

Solución 2

Ok, así que me las arreglé para responder mi propia pregunta, aunque no de la forma más ideal:

 def new_user(line)
    params = Hash.new
    params[:user] = Hash.new
    params[:user]["email"] = line[0]
    params[:user]["first_name"] = line[1]
    params[:user]["last_name"] = line[2]
    params[:user]["phone"] = line[3]
    #generate random password of length 6
    password = ActiveSupport::SecureRandom.base64(6) 
    #generate username by adding first and last name + 3 random characters
    username = (line[1] + line[2])
    username = username + ActiveSupport::SecureRandom.base64(3)
    params[:user]["login"] = username
    params[:user]["password"] = password
    params[:user]["password_confirmation"] = password

    #check to see if user already exists
    @existing_user = User.find_by_email(line[0])

    if(@existing_user)
      #user exists
      #do nothing
    else
      #user is brand new
      @new_user = User.new(params[:user])
      @new_user.reset_persistence_token
      if(@new_user.save)
        @new_user = User.find_by_email(line[0])
        #user saved successfully
      else
        #a problem occurred
        flash[:errors] = @new_user.errors
      end
    end
  end 

Otros consejos

Me encontré con este mismo problema ayer. Sin embargo, estoy usando el complemento oauth, por lo que el inicio de sesión / correo electrónico no son campos obligatorios para mí, estaba fallando porque el token de persistencia no estaba presente, lo cual logré agregando

user.reset_persistence_token

justo antes de llamar a user.save

Espero que ayude un poco. Sería bueno encontrar una forma más limpia de hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top