为每个用户的新创建列添加值

时间:2013-09-23 01:17:45

标签: ruby-on-rails

我在users表中创建了一个新列(令牌),我希望为每个现有用户影响此列的生成值。我补充的是:

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+\-.]+@[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 }

我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

您似乎正在使用before_create回调。尝试使用before_save

编辑:

您需要跳过验证才能为现有用户生成令牌。在Rails控制台中:

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

答案 1 :(得分:0)

看起来你没有在任何地方设置密码属性,这就是验证失败的原因。