2013-10-01 3 views
0

는 내가 레일 콘솔에서이 작업을 실행 :내 레일 앱에 업데이트 된 속성을 가진 기존 사용자를 저장할 수없는 이유는 무엇입니까?

u = User.first 
    User Load (0.3ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
=> #<User id: 4, name: "Administrator", email: "[email protected]", created_at: "2013-09-27 01:01:54", updated_at: "2013-09-29 23:52:11", password_digest: ".......", remember_token: "........", admin: true, num_credits: nil> 
2.0.0p247 :002 > u.num_credits = 1 
=> 1 
2.0.0p247 :003 > u.num_credits 
=> 1 
2.0.0p247 :004 > u.save 
    (0.3ms) begin transaction 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 4) LIMIT 1 
    (0.2ms) rollback transaction 
=> false 

답변

1

구원이 사용자를 중지하고 일부 검증이 있어야합니다. 사용자 모델에서 유효성 검사를 확인하십시오. 이 사용자의 오류를 확인할 수도 있습니다 u.errors.full_messages.to_sentence

+0

감사! "암호가 너무 짧다"는 말을 듣고 있는데, 나는 잊어 버렸습니다. 기존 사용자에 대한 검증이었습니다. 암호가 변경 될 때만 실행되는 유효성 검사를 수행 할 수 있습니까? 이렇게하면 컨트롤러는 비밀번호를 입력하지 않고도 사용자의 필드 (이 경우 num_credits)를 변경할 수 있습니까? – jackerman09

+0

내 후속 질문에 대한 의견이 있으십니까? – jackerman09

+1

업데이트시 변경 사항을 생성하거나 속성 변경시 생성하지 않거나 둘 다 수행하도록 유효성 검사를 복원 할 수 있습니다 – techvineet