2016-12-08 1 views
0

내 Rails (Rails 5 사용) 응용 프로그램은 현재 사용자가 휴대폰 번호와 비밀번호로 로그인/가입 할 수 있도록 설정되어 있습니다. 이것은 Devise를 사용하지만 전자 메일이 아닌 authentication_keys를 mobile_number로 변경하여 설정되었습니다.입력 한 사용자가 자신의 이메일을 삭제하지 못하도록 방지

이메일 주소를 포함한 추가 세부 정보를 추가 할 수있는 양식이 있습니다. 현재 전자 메일을 입력하는 것이 의무 사항이 아니기 때문에 전자 메일에 대한 유효성 검사가 없습니다. 그러나 사용자가 전자 메일 주소를 입력하도록 선택하면 되돌아 가서 삭제할 수 없습니다 (업데이트 만 가능). 내가 이메일 필드가 비어 있지 않은 때 이메일을 필요로 (하지만이 작동하지 않았다)하게 편집 할 수 있다고 생각 사용자 모델에서이 코드 조각도있다 :

# app/models/user.rb 
def email_required? 
    false unless email.present? 
end 

답변

2

:

validates :email, presence: true, if: -> { email_was.present? } 
으로
+0

감사합니다! 이것은 치료를했다 – cdimitroulas

+0

물론! 좋은 것, inbuilt 유효성 검사 사용하기 –

1

당신은 추가 할 수는 갱신시 실행됩니다 지정 유효성 검사 : 사용자가 한 번

class User 
    validate :non_removable_email, on: :update 

    private 

    def non_removable_email 
    return if email_was.nil? 

    errors.add(:email, 'Can only be edited') if email.blank? 
    end 
end 

가 편집 페이지에 Submit 안타, 유효성 검사가 실행됩니다. email이 설정되지 않은 경우 (예 : nil) 아무 일도 발생하지 않습니다. 그러나 email이 있었지만 비어있는 것으로 변경되면 오류가 발생합니다.

당신은 이전 이메일의 존재 조건 presence 유효성 검사를 추가 할 수 있습니다
+0

감사 제 솔루션을 사용하면 논리, 메시지 등을 검증하는 것 이상의 제어가 가능합니다.하지만 Alex의 솔루션은 갈 길이 멀다는 것을 알지 못합니다. – cdimitroulas

+1

@cdimitroulas 바로 안드레이는,이 또한 잘 작동하지만 난 그게 더 간결했다 알렉스의 방법으로가는 결국 –

관련 문제