2009-10-22 39 views
2

我是很新的Ruby on Rails的,所以請多多包涵:)生成一個新的用戶編程(驗證邏輯)

我處理Rails中導入.csv文件,我想以編程方式創建新用戶(我使用的是AuthLogic寶石以及角色需求),到目前爲止我使用:

示例行:

[email protected], 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 

問題是,這不會添加一個新用戶,它試圖但失敗(數據庫開始後跟回滾),我假設因爲我沒有填寫所有字段,如登錄名,密碼等等

我是否必須明確地爲這些字段生成值?

任何幫助將不勝感激

+0

您可以發佈您的用戶對象? 另外,你可以使用user.valid?查看用戶對象是否有效,並且當您嘗試保存時,user.errors數組將包含所有錯誤的列表。 – 2009-10-22 14:38:33

+0

嗨羅布,感謝回到我身邊,似乎從調用user.errors的問題是,我沒有指定密碼或登錄(用戶名)。密碼問題很容易,因爲我可以這樣做: password = ActiveSupport :: SecureRandom.base64(6) params [:user] [「password」] =密碼 params [:user] [「password_confirmation」] =密碼 設置密碼,但是如何選擇遠程用戶友好且唯一的登錄名? – Chris 2009-10-22 19:28:04

回答

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 
2

昨天我遇到了同樣的問題。我使用的是OAuth的插件,雖然對我來說並不需要登錄/電子郵件字段,它是在持久性失敗令牌不存在,我加入

user.reset_persistence_token 

得到周圍只是打電話user.save

希望能有所幫助。很高興找到一個更乾淨的方式來做到這一點。