2012-04-16 97 views
1

我們有一個應用程序,用戶可以在其中設置他/她的首選日期/時間格式。預計用戶將在整個應用程序中以配置的格式輸入datetime。現在問題是幾個格式datetime被錯誤解析,而create/updateActiveRecord具有不同日期/時間格式的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

已經有人問類似的問題hereruby-forum但解決的辦法並不適用於我的情況下,我無法配置因爲每個用戶都有自己喜歡的日期時間格式,所以整個應用程序都是單一的日期時間格式

現在要使用多個datetime格式,我打算在將params傳遞給ActiveRecord之前對其進行操作。因此,步驟想

  1. datetimeparams地圖
  2. 與用戶的首選日期時間格式
  3. 格式datetimeActiveRecord使用的默認格式解析它
  4. 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 

是否有人請驗證它是否正確?如果有人提出了更好的方法來實現這一目標,我會很感激。

感謝, 阿米特·帕特爾

+0

[這裏](http://stackoverflow.com/a/9725374/517483)是很好的解釋如何在'string'被自動轉換爲''date' ActiveRecord' – 2012-04-17 11:13:39

+0

Draiken具有在[ruby-forum](http://www.ruby-forum.com/topic/4085912)回答了這個問題 – 2012-04-17 14:17:47

回答

0

我會去與我提到的方法。如果有人有更好的方式,請繼續分享。

謝謝,阿米特帕特爾