2013-09-23 112 views
0

我在我的用戶表中創建了一個新的列(標記),並且我想要爲每個現有用戶對此列生成一個值。我補充說明的是:爲每個用戶添加一個新創建的列

class User < ActiveRecord::Base 
    before_save :generate_token 

    private 
    def generate_token 
     self.token = SecureRandom.urlsafe_base64(true, false) 
    end 

end 

然後我試着做:

rails console 
> User.find_each(&:save) 

但新柱猶無爲每個用戶。

當我嘗試保存只有一個用戶:

user = User.first 
user.save! 

它給了我一個錯誤:

ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 6 characters) 

這是從用戶模式我的驗證:

VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i 
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } 
has_secure_password 
validates :password, length: { minimum: 6 } 

我怎麼可以解決這個?

+0

你可以發佈這個模型的驗證嗎? –

+0

密碼是虛擬屬性,不存在 – medBo

+0

@DougR更新我的問題 – medBo

回答

0

看起來像你正在使用before_create回調。嘗試使用before_save

編輯:

你需要跳過驗證,以生成現有用戶的令牌。在Rails控制檯中:

User.find_each do |user| 
    user.save!(validate: false) 
end 
+0

也使用它,但沒有結果 – medBo

+0

您是否在更改回調後重新加載了您的導軌控制檯? –

+0

是的,它似乎有一個驗證問題,我更新我的問題 – medBo

0

它看起來不像是在任何地方設置密碼屬性,這就是驗證失敗的原因。

+0

正確。但是,在這種情況下,OP不想設置密碼,因爲他正在批量更新其現有用戶上的令牌字段。他只需跳過驗證即可執行批量更新。 –

相關問題