Domanda

Sono abbastanza nuovo con Ruby on Rails, quindi per favore abbi pazienza :)

Sto elaborando un file .csv importato in Rails e voglio creare a livello di programmazione nuovi utenti (sto usando la gemma AuthLogic insieme al Requisito di ruolo), finora sto usando:

Riga di esempio:

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

Codice:

  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

Il problema è che questo non aggiunge un nuovo utente, ci prova ma fallisce (DB Begin seguito da Rollback), presumo perché non sto compilando tutti i campi, come login, password ecc.

Devo generare esplicitamente valori per questi campi?

È stato utile?

Soluzione 2

Ok Quindi sono riuscito a rispondere alla mia domanda, anche se non nel modo più ideale:

 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 

Altri suggerimenti

Ieri ho riscontrato questo stesso problema. Sto usando l'addon oauth anche se quindi i campi login / email non sono obbligatori per me, non è stato presente il token di persistenza non presente che ho aggirato aggiungendo

user.reset_persistence_token

poco prima di chiamare user.save

Spero che aiuti un po '. Sarebbe bello trovare un modo più pulito di farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top