2011-07-01 11 views
8

當我在窗體中使用datetime_select時,Rails將正確調整日期時間數據的時區(按照我的config.time_zone設置),並且將呈現同一表單的edit視圖中的正確時區。Rails的config.time_zone不適用於加載到text_field的日期時間數據。固定?

但是,當我嘗試將相同的數據檢索到text_field(對於相同表單的相同edit視圖)時,Rails似乎沒有針對時區進行調整。

/events/edit.html.erb(完整文件):

<h1>Edit This Event</h1> 
<%= form_for(@event) do |f| %> 
    <%= render 'fields', :f => f %> 
    <div class="actions"> 
     <%= f.submit "Update Event" %> 
    </div> 
<% end %> 

/events/_fields.html.erb(相關線路只:)

<div class="field"> 
    <%= f.label  :time_start, "Start Time" %><br /> 
    <%= f.text_field :time_start, :class => "datetimefield" %> 
</div> 

例子:我區域的偏移量是-500。我在表單中輸入8:00作爲start_time,將13:00 UTC寫入數據庫,8:00呈現在show頁面(感謝config.time_zone佔偏移量),但是當我嘗試編輯該對象時, start_time的表單的text_field被加載到13:00(如果提交時沒有改變,它會在存儲在數據庫中時變爲18:00)。

這是有問題的,因爲我試圖使用jQuery UI的DatePicker(帶有TimePicker插件),它依賴於text_field(不會與datetime_select一起使用)。

有沒有辦法讓Rails將config.time_zone偏移量應用到文本字段?

運行Rails 3.0.5,部署到Heroku。

道歉提前幾個星期前問了一個非常similar question。那裏的信息仍然適用,我現在對問題有了更好的理解,所以我重新提出了問題。

回答

16

正如我在質詢時說,我的主要問題是越來越ActiveRecord的應用現有的「config.time_zone」設置爲text_fields。

事實證明,有一個非常簡單且面向未來的方法可以實現這一點:只需明確添加一個:value並提取完全相同的數據 - 無需調用額外/新方法!在我而言,這意味着:

<%= f.text_field :time_start, :value => f.object.time_start, :class => "datetimefield" %> 

這是一箇中間步驟,我會嘗試其他可能的解決方案,我很驚訝地發現,一切又恢復了所有對自己(與「配置工作.time_zone'我已經在'config/application.rb'中設置了)。

我已經測試過它,並且適用時也適用適當的DST偏移量(就像人們期望的那樣,因爲'config.time_zone'已設置)。

+0

醜陋但似乎是現在唯一的選擇... – Mirko

+0

確實,甚至4年後的最佳解決方案。 如果您使用簡單表格: 'f.input:time_start,input_html:{value:f.object.time_start}' –

相關問題