사용자 생일을 나타내는 선택 입력 세트 인 생일, 생일 및 생일이 있습니다. 다음과 같이 birthyear의 유효성을 검사하고 싶습니다.레일에 저장하기 전에 입력을 정수로 변환하십시오.
그래서 사용자는 등록 할 때 최소 12 년에서 최대 50 년이 될 수 있습니다.
제 문제는 입력의 변수가 정수가 아니라 문자열이라는 것입니다.
어떻게 입력을 정수로 변환 할 수 있습니까? 사용자 나이를 확인할 수있는 더 쉬운 방법이 있습니까?
사용자 생일을 나타내는 선택 입력 세트 인 생일, 생일 및 생일이 있습니다. 다음과 같이 birthyear의 유효성을 검사하고 싶습니다.레일에 저장하기 전에 입력을 정수로 변환하십시오.
그래서 사용자는 등록 할 때 최소 12 년에서 최대 50 년이 될 수 있습니다.
제 문제는 입력의 변수가 정수가 아니라 문자열이라는 것입니다.
어떻게 입력을 정수로 변환 할 수 있습니까? 사용자 나이를 확인할 수있는 더 쉬운 방법이 있습니까?
birthyear
db 열을 문자열로 정의한 것처럼 들립니다. 레일스는 할당 된 inut 매개 변수를 적절한 유형으로 변환합니다. 따라서 user.new(params[:user])
은 정의 된 유형 db 컬럼 유형을 저장하는 birthyear
을 저장합니다.
db 열을 정수로 변경할 수없는 경우 올바른 문자열 배열을 만들어보십시오. 마음에 베어 이제
validates_inclusion_of :birthyear,
:in => (Date.today.year-50..Date.today.year-12).map(&:to_s)
는, 생산, 모델 클래스는 캐시 얻을 수 있고, 당신은 당신이 다시 시작할 때까지 새 해에 대 한 잘못되는 날짜 범위의 경우있을 수 있습니다.
이 기능을 유효성 검사 기능에 추가하고이 경우를 막기 위해 포함 확인을 사용하지 않을 것입니다.
def validate
current_year = Date.today.year
if birthyear && (birthyear.to_i <= current_year - 50 || birthyear.to_i >= current_year - 12)
errors.add(:birthyear, "must be between 12 and 50 years of age")
end
end
자,이 모든 들어오는 입력이 4 자리 연도 가정합니다.
이 규칙 또는 다른 오류로 인해 유효성 검사 오류가 발생합니까? API 문서는 나이 필드의 유효성 검사를 보여 주며, 필요한 모든 변환이 없음을 보여줍니다. – Corey