【问题标题】:ActiveRecord with different Date/Time format具有不同日期/时间格式的 ActiveRecord
【发布时间】:2012-04-16 14:36:52
【问题描述】:

我们有一个应用程序,用户可以在其中设置他/她喜欢的日期/时间格式。用户应在整个应用程序中以配置的格式输入datetime。现在的问题是对于少数格式,datetime 被错误解析,而 create/update 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"> 

我知道 ruby​​/rails 已经预定义了一组格式,用于评估日期/时间字符串,如果按顺序匹配任何格式,它会解析具有该格式的给定字符串。

另一个例子

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. params地图读取datetime
  2. 使用用户首选的日期时间格式对其进行解析
  3. datetime 格式化为ActiveRecord 使用的默认格式
  4. params 中的当前datetime 替换为重新格式化的日期时间

这是一个控制器的sn-p

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

有没有人可以验证它是否是正确的方法?如果有人提出更好的方法来实现这一点,我将不胜感激。

谢谢, 阿米特·帕特尔

【问题讨论】:

  • Here 很好地解释了string 如何在ActiveRecord 中自动转换为date
  • Draiken 已在ruby-forum 上回复此问题

标签: ruby ruby-on-rails-3 datetime activerecord


【解决方案1】:

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

谢谢,阿米特·帕特尔

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多