具有不同日期/时间格式的ActiveRecord

我们有一个应用程序,用户可以设置他/她的首选日期/时间格式。 用户应在整个应用程序中以配置的格式输入datetime时间。 现在的问题是,在create/update ActiveRecord时,几种格式的datetime被错误地解析。

例如,用户已将日期/时间格式设置为hh:mm dd/MM/yyyy 。 现在,如果用户输入17:00 04/05/2012则将其解析为5 PM 5 Apr, 2012 5 PM 4 May, 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') => #

我知道ruby / rails具有预定义的格式集,日期/时间字符串将根据这些格式进行评估,如果按顺序匹配任何格式,它将使用该格式解析给定的字符串。

另一个例子

 1.8.7 :006 > a = Article.create!(:name => 'a1', :published_at => '17:00 15/12/2012') => #

用户在15 December, 2012进入了解析nil

有人已经在这里和ruby-forum上提出了类似的问题,但该解决方案不适用于我的情况,因为我无法在整个应用程序中配置单个日期时间格式,因为每个用户都有自己的首选日期时间格式。

现在使用多个datetime格式,我打算在将params传递给ActiveRecord之前对其进行操作。 所以步骤想

  1. params地图读取datetime时间
  2. 使用用户首选的日期时间格式解析它
  3. datetime格式化为ActiveRecord使用的默认格式
  4. 用重新格式化的日期时间替换params当前datetime时间

这是控制器的片段

 class ArticlesController  [:create, :update] ... ... private def format_date_time datetime = params[:datetime] params[:datetime] = DateTime.strptime(datetime, pref_date_time_format).strftime('%c') end end 

有人可以validation它是否是正确的方法? 如果有人建议更好的方法来实现这一目标,我会感激不尽。

谢谢,阿米特帕特尔

我会采用我提到的方法。 如果有人有更好的方法请继续分享。

谢谢,阿米特帕特尔