Erstellen Sie einen neuen Benutzer programmatisch (Auth Logic)
-
05-07-2019 - |
Frage
Ich bin ganz neu in Ruby on Rails also bitte Geduld mit mir:)
Ich bin der Verarbeitung eine importierte CSV-Datei in Rails und ich möchte programmatisch neue Benutzer erstellen (ich die AuthLogic Gem bin mit zusammen mit Rollen Requirement), So Far verwende ich:
Beispiel Line:
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
Das Problem ist, dass dies nicht einen neuen Benutzer hinzufügt, versucht es aber nicht (DB von Rollback gefolgt Begin), gehe ich davon aus, weil ich nicht in allen Bereichen, wie Login, Passwort usw. füllen bin
Muss ich explizit Werte für diese Felder erzeugen?
Lösung 2
Ok So habe ich es geschafft habe meine eigene Frage zu beantworten, wenn auch nicht in der idealsten Möglichkeiten:
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
Andere Tipps
Ich kam in diesem gleichen Problem gestern. Ich bin mit dem oauth Addon obwohl so die Login / E-Mail ist nicht für mich erforderlichen Felder aus, es wurde auf der Persistenz andernfalls Token nicht vorhanden ist, was ich bekam um durch Hinzufügen
user.reset_persistence_token
kurz vor dem Aufruf user.save
Ich hoffe, das hilft ein wenig. Wäre schön, eine sauberere Art und Weise zu tun, um es zu finden.