Question

Je connais assez bien Ruby on Rails, alors merci de bien vouloir supporter:)

Je traite un fichier .csv importé dans Rails et je souhaite créer de nouveaux utilisateurs par programme (j'utilise AuthLogic Gem avec la spécification de rôle). Jusqu'à présent, j'utilise:

Exemple de ligne:

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

Code:

  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

Le problème étant que cela n’ajoute pas de nouvel utilisateur, il essaie mais échoue (DB Begin suivi de Rollback), je suppose parce que je ne remplis pas tous les champs, tels que login, mot de passe, etc.

Dois-je générer explicitement des valeurs pour ces champs?

Était-ce utile?

La solution 2

Ok, j'ai donc réussi à répondre à ma propre question, mais pas de la manière la plus idéale:

 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 

Autres conseils

Je suis tombé sur le même problème hier. J'utilise l'addon oauth, donc les identifiants de connexion / e-mail ne sont pas des champs obligatoires pour moi.

user.reset_persistence_token

juste avant d'appeler user.save

J'espère que ça aide un peu. Ce serait bien de trouver une façon plus propre de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top