2013-03-07 3 views
1

나는 ActiveRecord을 처음 사용하며 매우 간단하게 작업하려고합니다. 나는 인터넷을 검색하여 해결책을 찾지 못했습니다.mysql의 ActiveRecord DATETIME 열 값

mysql에 DATETIME 유형의 테이블 열이 있습니다. 이 테이블에는 이미 많은 값이 있습니다. 이 칼럼에 대한 몇 가지 예를 들어 값은 내가 데이터베이스에서 레코드를 검색 할 수 있습니다 railsActiveRecord를 사용 NULL, 0000-00-00 00:00:002009-04-30 10:30:22

이다. 그러나 0000-00-00 00:00:00의 값을 가진 DATETIME 필드의 값을 요청하면 얻을 수있는 결과는 nil입니다.

데이터베이스 값이 NULL 인 경우 nil 개체가 반환되므로 의미가 있습니다.

2009-04-30 10:30:22의 데이터베이스 값은 또한 의미가있는 Thu, 30 Apr 2009 10:30:22 UTC +00:00을 반환합니다.

나는 _before_type_cast을 사용하는 것이 도움이 될 것이라고 생각했지만 그렇지 않았습니다.

반환 된 개체의 데이터베이스 값이 0000-00-00 00:00:00인지 어떻게 확인할 수 있습니까?

답변

3

레일스에 내장되어있는 날짜를 캐스팅하지 않는 것이 아닌 것처럼 보입니다.

사실이 방법이 없다는 신호는 아마도 최적이 아닌 방식으로 작업하고 있다는 신호이므로, 가능한 경우에만 0000-00-00 00:00:00 값을 모두 nil으로 마이그레이션하는 것이 가장 좋습니다.

이것이 옵션이 아닌 경우.

Post.where("date_field = '0000-00-00 00:00:00' && id = ?", post.id).exists? 

희망하는 데 도움이 : 당신은 어떤 하나 개의 레코드가이 같은 0000-00-00 00:00:00를 통해 SQL 조건 뭔가가 있는지 여부를 확인할 수 있습니다.

+0

나는 이것이 최적이 아닌 것에 동의합니다. 그러나, 나는 레거시 PHP 응용 프로그램과 함께 일하고 있으며 '0000-00-00 00 : 00 : 00' 값은 중요한 의미와'NULL '값을가집니다. 나는 이것에 더 나은 레일 해결책이 없다는 것에 놀랐다. 그래도 나 한테서 득표 해. 감사! –