Pergunta

Eu sou muito novo para Ruby on Rails por isso, tenha comigo:)

Estou processando um arquivo .csv importados em Rails e quero programaticamente criar novos usuários (estou usando o AuthLogic Gem juntamente com o Requisito Papel), até agora eu estou usando:

Exemplo de linha:

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

O problema é que isso não adicionar um novo usuário, ele tenta mas falha (DB Begin seguido de Reversão), eu assumo porque eu não estou preenchendo todos os campos, tais como login, senha etc.

Eu tenho que gerar explicitamente valores para esses campos?

Foi útil?

Solução 2

Ok Então eu consegui responder a minha própria pergunta, embora não o mais ideal de maneiras:

 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 

Outras dicas

Me deparei com este mesmo problema ontem. Eu estou usando o addon oauth embora assim o login / e-mail não são necessários campos para mim, ele estava falhando sobre a persistência token não estando presente que eu tenho em torno adicionando

user.reset_persistence_token

apenas antes de chamar user.save

Espero que ajude um pouco. Seria bom para encontrar uma maneira mais limpa de fazê-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top