2010-01-05 1 views
3

액세스 할 때 "datetime"데이터를 객체로 변환하지 않도록 activerecord에 알릴 수 있습니까?

나는 단순히 datetime 필드에 액세스하는 코드를 가지고 있으므로 activerecord는 그것을 읽을 때 자동으로 Time 객체로 변환한다.

@some_appointment.some_time 

문제는 때때로 "some_time"datetime 열에 잘못된 데이터가있는 것입니다. "2009-12-20"대신 "0209-12-20". 이로 인해 Ruby는 액세스 권한이 "연쇄 적으로 너무 큽니다"오류가 발생하고 오류가 예외는 아니므로이를 잡을 수 없습니다. 주어진 데이터베이스에 유효하지 않은 데이터가있는 것을 감안할 때, 시간 문자열을 읽고 Time.parse를 사용하여 시간 개체를 직접 만들고 싶습니다. 그래서 시간을 파싱 할 수 없으면 예외를 잡을 수 있습니다. 이것을 어떻게 할 수 있습니까? 더 좋은 방법이 있습니까?

+0

당신이 나쁜 데이터의 인스턴스 제거하기 위해 무엇을하고 있는가? 그렇다면이 문제를 해결하기 위해 데이터베이스와 직접 인터페이스 할 수있는 많은 작업처럼 보입니다. – bobbywilson0

답변

3

당신은 같이 attribute_for_inspect을 시도 할 수 있습니다 : 당신은 또한 단지 또는 뭔가를 정상화하기 위해 데이터베이스에서 데이터에 갈 액티브를 사용하지 않는 독립형 스크립트를 작성하는 것이 좋습니다

SomeModel.find(:first).attribute_for_inspect 'some_time' 
#=> ""2009-02-23 23:15:24"" 

. 아마 나쁜 데이터의 특별한 경우를 앱에 코딩하는 것보다 빠를 것입니다.

3

작동 여부는 테스트하지 않았지만 attributes_before_type_cast을 사용해 보셨습니까? Rails가 유형 변환을 실행하기 전에 데이터를 리턴하지만, 오브젝트를로드 할 때 Rails가 변환을 시도하는지 확실하지 않습니다.

예 :

@some_appointment.attributes_before_type_cast['some_time'] 
+1

이상 :'@ some_appointment.some_time_before_type_cast' –

1

당신은 당신의 모델이 같은 기본 접근을 무시할 수 :

def some_time 
    read_attribute(:some_time) 
    rescue 
    # Try to parse this guy 
    self.some_time_before_type_cast 
end 
관련 문제