我对Ruby on Rails很陌生,所以请耐心等待我:)
我正在Rails中处理导入的.csv文件,我想以编程方式创建新用户(我正在使用AuthLogic Gem以及角色需求),到目前为止我正在使用:
示例行:
Steve.Jobs@apple.com, Steve, Jobs, 555-APPLE
代码:
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
问题是这不会添加新用户,它会尝试但失败(DB Begin后跟Rollback),我假设因为我没有填写所有字段,例如登录,密码等。< / p>
我是否必须为这些字段显式生成值?
答案 0 :(得分:2)
昨天我遇到了同样的问题。我正在使用oauth插件,所以登录/电子邮件对我来说不是必需的字段,因为我没有出现持久性令牌而无法添加
user.reset_persistence_token
在调用user.save之前
希望有所帮助。很高兴找到一种更干净的方式。
答案 1 :(得分:1)
好的所以我设法回答了我自己的问题,尽管不是最理想的方式:
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