2010-04-21 3 views
2

사용자 생일을 나타내는 선택 입력 세트 인 생일, 생일 및 생일이 있습니다. 다음과 같이 birthyear의 유효성을 검사하고 싶습니다.레일에 저장하기 전에 입력을 정수로 변환하십시오.

그래서 사용자는 등록 할 때 최소 12 년에서 최대 50 년이 될 수 있습니다.

제 문제는 입력의 변수가 정수가 아니라 문자열이라는 것입니다.

어떻게 입력을 정수로 변환 할 수 있습니까? 사용자 나이를 확인할 수있는 더 쉬운 방법이 있습니까?

+0

이 규칙 또는 다른 오류로 인해 유효성 검사 오류가 발생합니까? API 문서는 나이 필드의 유효성 검사를 보여 주며, 필요한 모든 변환이 없음을 보여줍니다. – Corey

답변

1

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 자리 연도 가정합니다.

+0

맙소사, 너 어디 있겠 니? 레일스가 DB에 있으면 정수로 바꾼다. 그냥 바꿔 치기 만하면 돼. 고맙습니다! 너무 바보 같아. – Lisinge

+0

어리 석을 필요가 없습니다. Rails는 장면 뒤에서 * 많은 것을 처리하며 예상대로 작동하지 않을 때 길을 잃기 쉽습니다. –

+0

정말 대단합니다.하지만 당신은 자신이 그렇게해야한다고 생각하는 경향이있어서 쉬운 일을 정말 힘들게 만듭니다. 나는 이것이 PHP에서 오는 저주라고 생각한다. – Lisinge

관련 문제