2012-12-04 2 views
0

로 정수를 저장 I는 입력을 선택 시간대에 사용하고 어떤 다음은 여기 - http://railscasts.com/episodes/106-time-zones-revised나는 시간대에 railscast을 다음입니다 time_zone_select

발견했다. 현재 양식은 문자열 값을 데이터베이스에 저장합니다 (예 : "Alaska"). 대신 UTC 오프셋을 정수로 저장하고 싶습니다. 이 일을 어떻게 하죠?

<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones 

답변

0

두 가지 옵션이 있습니다. 선택을 사용하거나 가상 속성을 만들 수 있습니다. 아마 후자의 옵션을 선호 할 것입니다.

시간대는 바로 당신에게 제공하지 않기 때문에 (몇 초 또는 문자열로) 시간 (utc_offset 초이다)이 같은 선택 직접 collection_select 사용할 수 없지만 사용할 수에 오프셋 :

f.select :time_zone, ActiveSupport::TimeZone.us_zones.map { |z| [z.name, z.utc_offset/1.hour] } 

가상 속성을 사용하는 경우, 이미 사용하고있는 코드를 사용하지만 사용 time_zone_name를 대신 : TIME_ZONE 다음과 같은 모델 업데이트 : 그것은 수 있기 때문에 내가 마지막 옵션을 선호

def time_zone_name=(value) 
    time_zone = ActiveSupport::TimeZone.new(value).utc_offset/1.hour 
end 

def time_zone_name 
    # time_zone is a number like -9 
    ActiveSupport::TimeZone.new(time_zone).name 
end 

을 너는 오프셋이나 이름으로 시간대를 r에서부터 설정한다. 콘솔이나 어디서나 설정할 수 있습니다.

+1

표준 시간대와 오프셋이 일대일 관계가 아닙니다. – hoffmanc

+0

그는 데이터베이스에 UTC 오프셋을 저장하려고합니다. 그리고 그는 사용자가 시간대를 선택하기를 원합니다. 또는 질문을 읽지 않았습니까? – mrbrdo

+0

주의 사항 : 세계에서 3.5 시간 (캐나다 f.e.의 장소)을 사용하는 일부 부품이 있습니다. – Lichtamberg