我們有一個應用程序,用戶可以在其中設置他/她的首選日期/時間格式。預計用戶將在整個應用程序中以配置的格式輸入datetime
。現在問題是幾個格式datetime
被錯誤解析,而create/update
ActiveRecord
。具有不同日期/時間格式的ActiveRecord
例如,用戶在hh:mm dd/MM/yyyy
中設置了日期/時間格式。現在,如果用戶輸入17:00 04/05/2012
它解析它作爲5 PM 5 Apr, 2012
,它應該是5 PM 4 May, 2012
1.8.7 :004 > a = Article.create!(:name => 'a1', :published_at => '17:00 04/05/2012')
=> #<Article id: 2, name: "a1", published_at: "2012-04-05 17:00:00", created_at: "2012-04-16 13:54:36", updated_at: "2012-04-16 13:54:36">
據我所知,紅寶石/導軌具有預定義的抵靠該日期/時間字符串被評估和格式集若有格式在序列匹配它使用該格式解析給定的字符串。
又如
1.8.7 :006 > a = Article.create!(:name => 'a1', :published_at => '17:00 15/12/2012')
=> #<Article id: 4, name: "a1", published_at: nil, created_at: "2012-04-16 13:55:43", updated_at: "2012-04-16 13:55:43">
這裏用戶輸入15 December, 2012
其解析到nil
已經有人問類似的問題here和ruby-forum但解決的辦法並不適用於我的情況下,我無法配置因爲每個用戶都有自己喜歡的日期時間格式,所以整個應用程序都是單一的日期時間格式
現在要使用多個datetime
格式,我打算在將params
傳遞給ActiveRecord
之前對其進行操作。因此,步驟想
- 讀
datetime
從params
地圖 - 與用戶的首選日期時間格式
- 格式
datetime
由ActiveRecord
使用的默認格式解析它 - 在
params
替換當前datetime
與重新格式化datetime
這裏是控制器的一個片段
class ArticlesController < ApplicationController
before_filter :format_date_time, :only => [:create, :update]
...
...
private
def format_date_time
datetime = params[:datetime]
params[:datetime] = DateTime.strptime(datetime, pref_date_time_format).strftime('%c')
end
end
是否有人請驗證它是否正確?如果有人提出了更好的方法來實現這一目標,我會很感激。
感謝, 阿米特·帕特爾
[這裏](http://stackoverflow.com/a/9725374/517483)是很好的解釋如何在'string'被自動轉換爲''date' ActiveRecord' – 2012-04-17 11:13:39
Draiken具有在[ruby-forum](http://www.ruby-forum.com/topic/4085912)回答了這個問題 – 2012-04-17 14:17:47