2010-06-03 75 views
2

有沒有辦法讓Rails的將記錄保存到數據庫中沒有它自動的時間戳轉換成UTC保存之前?問題是,我有一個從在山地時間節省一切舊的數據庫中提取數據,偶爾我也有我的Rails應用程序寫入到數據庫的幾個模型。問題是,它每次都會將它從山地時間轉換到UTC,這是6-7小時(取決於DST)!毋庸置疑,這對報告數據庫非常混亂。獲取Rails的保存記錄到數據庫在非UTC時間

如果我能得到周圍做這個的,我會的。不幸的是,我不能做這個其他數據庫使用不同的時區,我也不能真正得到需要離開這個程序,保存到數據庫偶爾事實上任何東西。如果我能讓Rails停止嘗試幫助我,那會很棒。

回答

1

如果任何人的好奇,我終於有工作是做到以下幾點:

假設一個類Foo。我創建了一個after_save的方法搶時間,然後做對數據庫手動查詢,所以我的解決方案看起來是這樣的:

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 

這樣,一個記錄被保存到數據庫和時間戳字段的任何時間被修改了(在我的情況下,CreateStamp),我運行了第一個保存後的第二個查詢,它以我需要它的格式發送時間戳,而Rails沒有阻礙。

+0

非常有用的實際。我不知道他們爲什麼這樣做。 – 2011-02-02 23:37:06

相關問題