2013-08-04 2 views
0

레일 4가 Postgresql의 ts_range 데이터 유형을 지원하는 데 문제가 있습니다. 여기에 내가 계속 노력하고있는 코드는 다음과 같습니다 레일 4 ts_range가 지속되지 않음

before_validation :set_appointment 
attr_accessor :starting_tsrange, :ending_tsrange 

def set_appointment 
    self.appointment = convert_to_utc(starting_tsrange)...convert_to_utc(ending_tsrange) 
end 

def convert_to_utc 
    ActiveSupport::TimeZone.new("America/New_York").parse(time_string).utc 
end 

는 기본적으로 나는 두 문자열이 date_times를 대표하여 약속 ts_range의 시작과 끝의 인스턴스 변수를 설정합니다. 유효성 검사를하기 전에이를 utc로 변환하고 그 값을 지속되어야하는 약속 특성에 저장합니다. 그것은 일을 올바르게 설정하지만, 레코드를 가져 오려고하면 약속 속성이 0이됩니다. 이 코드가 예상대로 작동하지 않는 이유는 무엇입니까?

답변

0

코드의 미묘한 버그를 알아 냈습니다. 여기서 문제는 트리플 도트 범위 연산자입니다. 우리가 정확히 같은 시간에 두 개의 값을 얻으면. 삼중 도트는 시간이 a에서 up까지의 모든 것을 포함한다고 말하고, 정확한 시간이라면 아무것도 포함하지 않으며 결과는 0이됩니다. 이것은 그래서

(1...1).to_a # [] 
(1..1).to_a # [1] 

아래의 코드로이 시간 동안 같은 값을 가질 수 범위를 사용할 때 트리플 점 표기법을 사용하지 않는 것입니다 해결하는 방법을 시각화 할 수 있습니다. 대신 이중 점 표기법을 사용하십시오.

관련 문제