2015-04-21 19 views
0

我知道我能做到這一點:如何指定用於單個ActiveRecord創建或更新操作的時區?

Time.use_zone("St. Petersburg"){ 
    Foo.create!(
    topic: "foo", begins_at: "2015-06-01", ends_at: "2015-06-02" 
) 
} 

有沒有更優雅的方式來做到這一點?喜歡的東西:

Foo.create!(
    topic: "foo", begins_at: "2015-06-01", ends_at: "2015-06-02", 
    timezone: "St. Petersburg" 
) 
+1

爲什麼你想在本地時間的時間戳?它會使任何查詢或比較非常複雜。 – max

+0

'* _at'列是postgres沒有時區的'timetamp'。我應用程序中所有表格的所有日期時間列的所有數據都是UTC,包括本例。用戶提供的數據位於用戶的時區中。因此,在上面的第一個代碼示例中,用戶提交的數據在寫入數據庫之前有效地轉換爲UTC。 –

回答

0

一個選項:

Foo.create!(
    topic: "foo", 
    begins_at: DateTime.parse("2015-06-01").in_time_zone('St. Petersburg'), 
    ends_at: DateTime.parse("2015-06-02").in_time_zone('St. Petersburg') 
) 
+0

問題在於,從用戶提交的內容中抓取日期時間並不容易,因爲表單將它作爲一組獨立整數(年,月,日,...)提交。所以我不得不將它們組裝在一起,並且錯過了activerecord的便利。我想另一種方法是'f = Foo.new(...); f.begins_at = f.begins_at.in_time_zone(...); f.save' –

相關問題