具有不同日期/时间格式的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
之前对其进行操作。 所以步骤想
- 从
params
地图读取datetime
时间 - 使用用户首选的日期时间格式解析它
- 将
datetime
格式化为ActiveRecord
使用的默认格式 - 用重新格式化的日期时间替换
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它是否是正确的方法? 如果有人建议更好的方法来实现这一目标,我会感激不尽。
谢谢,阿米特帕特尔
我会采用我提到的方法。 如果有人有更好的方法请继续分享。
谢谢,阿米特帕特尔