2010-01-26 54 views
0

Rails支持Time.zone的應用程序支持時區整體。我需要能夠支持用戶爲記錄選擇的時區。用戶將能夠選擇記錄的日期,時間和時區,我希望所有的計算都可以根據用戶選擇的時區來完成。帶日期時間戳和時區支持屬性的ActiveRecord模型

我的問題是處理用戶選擇的時區的最佳做法是什麼。該模型使用time_zone_selectdatetime_select兩個不同的屬性timezonescheduled_at。模型保存時,scheduled_at屬性將轉換爲本地定義的Time.zone

當用戶返回到編輯scheduled_at屬性與datetime_select日期時間被設置爲轉換Time.zone時區,而不是timezone屬性。有沒有一種很好的方式來處理轉換到用戶選擇的時區?

回答

0

您可以在指定的控制器或應用程序範圍內的before_filter中處理此操作。看到這個例子:

# controllers/application.rb 
before_filter :set_user_time_zone 

private 

def set_user_time_zone 
    Time.zone = current_user.timezone if logged_in? 
end 

瑞安貝茨做了一個關於這個截屏:Time Zones in Rails 2.1

+0

我很欣賞的反饋。這與我所尋找的並不相同,因爲我不想在純粹的用戶級別上進行此操作。 我想我需要做的是有兩個時間戳,一個表示用戶選擇的時間和時區,另一個表示UTC版本。 – jtarchie

+0

我不會建議,因爲這會導致什麼時間戳代表什麼時間會產生混淆。最好默認爲UTC來存儲時間戳並在顯示/更新時來回轉換它們。 ActiveRecord爲你管理。 – mikezter