2012-05-17 2 views
1

내 응용 프로그램의 데이터베이스에서 계약 기간을 캡처하고 싶습니다. 나는 레일즈 3과 함께 포스트그레스를 사용하고있다. 용어는 계약 기간이다. 투입물의 예로는 5 년, 3 년 반, 2 년 3 개월이 있습니다. 나는 일반적으로 몇 년과 몇 달 동안 지속 시간을 포착 할 수 있기를 원합니다. 어떤 데이터 형식을 사용해야합니까?계약 기간 동안 사용할 Rails Active Record Migration 데이터 유형은 무엇입니까?

답변

2

나는 (정수로) 개월 만 캡처하거나 2 개의 별도 필드가 필요하다고 생각합니다. 몇 년 동안 한 달씩. 드롭 다운 메뉴로 구현 된 달을 가질 수 있으므로 0에서 11까지의 값만 허용됩니다.

마지막 옵션은 원하는 것보다 훨씬 정확한 datetime을 사용하는 것이므로 권장하지 않습니다.

+0

datetime은 간격이 아닙니다. datetime을 사용하는 경우 시간 범위를 만들려면 다른 필드가 있어야합니다. –

2

start_date와 end_date라는 두 가지 datetime 속성을 사용하여 계약 기간을 원하는 방식으로 년, 월, 일, 분, 초 등 원하는대로 나중에 표현할 수 있습니다.

당신은

class Contract < ActiveRecord::Base 
    def term 
    return self.end_date - self.start_date 
    end 
end 

용어는 초, 당신은 몇 가지 간단한 수학을 달, 세 달을 반환 할 것, 즉 용어라는 의사의 속성을 정의 할 수 있습니다, 등 또한 즉,

을 DateHelper을 사용할 수 있습니다
distance_of_time_in_words(@contract.start_date,@contract.end_date) 

등 '일년'또는 '삼년', '약 일년', 같은 근사 문자열을 출력합니다

4

PostgreSQL을은 interval 데이터 형식을 지원합니다 .

http://www.postgresql.org/docs/9.1/static/datatype-datetime.html

+1

예, 레일즈는 그렇지 않습니다. – Hbcdev

+0

레일 4! https://github.com/rails/rails/pull/7345 –

+0

어디에도 '간격'이 표시되지 않습니다 ... '간격'은 '3 일'과 같은 값이지만 ' 범위 '('2 일 전부터 내일까지 '와 같은 값). – Hbcdev

관련 문제