我对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),我假设因为我没有填写所有字段,例如登录,密码等。

我是否必须为这些字段显式生成值?

有帮助吗?

解决方案 2

好的所以我设法回答了我自己的问题,尽管不是最理想的方式:

 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 

其他提示

昨天我遇到了同样的问题。我正在使用oauth插件,所以登录/电子邮件对我来说不是必需的字段,因为我没有出现持久性令牌而无法添加

user.reset_persistence_token

在调用user.save之前

希望有所帮助。很高兴找到一种更干净的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top