2013-09-23 3 views
0

사용자 테이블에 새 열 (토큰)을 만들고 기존의 각 사용자에 대해이 열에 대해 생성 된 값에 영향을 주려고합니다. 내가 추가하는 것은 :각 사용자에 대해 새로 생성 된 열에 값 추가

rails console 
> User.find_each(&:save) 

을하지만, 새 열은 여전히 ​​각 사용자에 대해 nil을 :

class User < ActiveRecord::Base 
    before_save :generate_token 

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

end 

은 내가 어떻게하려고합니다.

나는 한 명의 사용자 만 저장하려고하면 그것은 나에게 오류를 제공

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을 사용해보세요.

편집 :

당신은 당신의 기존 사용자 토큰을 생성하기 위해 검증을 생략해야합니다. 레일즈 콘솔에서 :

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

도 사용하지만 결과는 없습니다. – medBo

+0

콜백을 변경 한 후 레일 콘솔을 다시로드 했습니까? –

+0

네, 유효성 검사의 문제가있는 것 같습니다. 내 질문을 업데이트합니다. – medBo

0

어디서나 암호 속성을 설정하는 것처럼 보이지 않으므로 유효성 검사가 실패합니다.

+0

맞습니다. 그러나이 경우 OP는 기존 사용자의 토큰 필드를 대량으로 업데이트하기 때문에 암호를 설정하지 않으려합니다. 그는 일괄 업데이트를 수행하기 위해 유효성 검사를 건너 뛰면됩니다. –

관련 문제