2015-01-21 3 views
1

내 모델 "User"의 날짜 속성은 :birthday입니다. 그러나 생일을 x/x/x이 아닌 다른 형식으로 제출하면 그냥 0이됩니다. 예를 들어 1/1/1은 "0001-01-01"이되지만 1/1/15은 0이됩니다. 1/1/2은 "0001-01-02"가되지만 22/1/3은 0이됩니다."date"데이터 유형의 올바른 형식은 무엇입니까?

나는 뭔가를 여기에서 놓치고있는 것처럼 느낀다. 날짜 속성은 x/x/x 일 수 있습니다. 맞습니까?

+0

보통 '문자열'이 아닌 '날짜'또는 '시간'(또는 '날짜 시간')을 제출해야합니다. – mhutter

+0

@Manuel 그래서 "1/1/1"은 "1/1/15"가 작동하지 않을 때 어떻게 작동합니까? –

+0

나는 아이디어가 없다. 아마 이것은 당신이 사용하고있는 DB와 관련이 있습니다. 그래서 Date를 제출해야합니다. 아래 맥스 ​​윌리엄의 대답을 참조하십시오. – mhutter

답변

1

어떻게 날짜를 설정 하시겠습니까? 그것은 @user.birthday = params[:birthday]과 같은가요? 이것은 날짜가 아니기 때문에 문제가 발생할 것입니다. 문자열이고, 데이터베이스가 날짜를 저장하는 방식과 다른 형식의 문자열입니다.

당신은 두 가지 옵션이있어 :

A) 이상적으로 당신이 날짜로 입력을 변환해야하고 실제 날짜 객체를 사용하여 필드를 설정합니다.

B) 매개 변수 형식이 DB 저장 날짜 (일치하는 "yyyy-mm-dd")와 일치하는지 확인하십시오.

가 바람직하다. 가능한 한 유용하게 날짜를 처리하도록 User # birthday = 메서드를 재정의합니다. 예 :

#in User model 
def birthday=(arg) 
    if arg.is_a?(Date) 
    self[:birthday] = arg 
    elsif arg =~ /\d+\/\d+\/\d+/ 
    self[:birthday] = Date.strptime(arg, "%d/%m/%y") 
    elsif arg =~ /\d+\-\d+\-\d+/ 
    self[:birthday] = Date.strptime(arg, "%y/%m/%d") 
    else 
    self[:birthday] = arg 
    end 
end 
+0

이 시점에서 저는 레일즈 콘솔을 사용하여 이것을 설정하려고합니다. $ User.create (birthday : "1/1/15")'. 왜 "1/1/1"이 효과가 있습니까? –

+0

레일즈는 날짜로 변환하는 것이 가장 좋지만 잘못된 결과를 초래할 수 있습니다. 어쩌면 마지막 숫자가 해당 월이 될 것으로 예상하고 있으며 15는 유효한 달이 아닙니다. 어느 쪽이든,별로 중요하지 않습니다. * ** 항상 ** 예상되는 형식의 문자열을 제공하거나 실제 Date 객체를 제공하여 ** 작동하는지 확인해야합니다. –

관련 문제