2010-06-03 2 views
2

저장하기 전에 자동으로 타임 스탬프를 UTC로 변환하지 않고 Rails가 데이터베이스에 레코드를 저장하도록 할 수있는 방법이 있습니까? 문제는 Mountain Time의 모든 것을 저장하는 레거시 데이터베이스에서 데이터를 가져 오는 몇 가지 모델을 가지고 있으며 때로는 Rails 앱에 해당 데이터베이스에 쓰기 권한을 부여해야하는 경우가 있습니다. 문제는 내가 할 때마다, 산지에서 시간을 UTC로 변환하는데, 이는 DST에 따라 6-7 시간 앞서기 때문입니다! 말할 필요도없이, 이것은 실제로 데이터베이스에 대한보고를 망칠뿐입니다.비 UTC 시간에 레코드를 데이터베이스에 저장합니다.

이렇게하면 될 수 있습니다. 불행히도이 다른 데이터베이스가 다른 시간대를 사용한다는 사실에 대해서는 아무 것도 할 수 없으며 때로는이 응용 프로그램이 때때로 해당 데이터베이스에 저장할 필요가 없게됩니다. Rails가 나를 도우려고 멈추게한다면, 좋을 것입니다.

클래스 푸 가정 : 나는 마침내 작업에 도착 어떤 사람이 호기심의 경우

답변

1

는 다음을 수행하는 것이 었습니다.

class Foo < ActiveRecord::Base 
    #stuff relating to class 
    def after_save 
    if (@changed_attributes.has_key?('CreateStamp')) 
     time_str = self.CreateStamp.in_time_zone('Mountain Time (US & Canada)').to_datetime.to_s(:db) 
     qry = "UPDATE Lead SET CreateStamp='#{time_str}' WHERE id='#{id}'" 
     connection.execute(qry) 
    end 
    end 
end 

이 방법 레코드가 데이터베이스와 타임 스탬프 필드에 보존 된 시간 : 내 솔루션은 다음과 같이 보입니다 있도록 시간을 잡아 다음 데이터베이스에 대해 수동으로 쿼리를 수행하는 after_save 방법을 만들어 (CreateStamp 제 경우) 수정되었습니다, 내가 그것을 필요로하는 형식으로 타임 스탬프를 보내는 초기 저장 후 두 번째 쿼리를 실행하고 레일 방식으로 얻을하지 않습니다.

+0

실제로 매우 유용합니다. 나는 그들이 왜 그렇게했는지 전혀 모른다. –

관련 문제