Rails:created_at以不同的格式返回

时间:2011-12-19 18:23:20

标签: ruby-on-rails activerecord

我有一个包含数十万首歌曲的歌曲模型,当我使用AR进行查询时,时间格式(渲染到json时)如下所示:2011-12-19T11:04:39Z。

当我使用Song.connection.execute()执行查询时,渲染到json时返回的时间格式如下:2011-11-20 19:00:08.207467

我实际上更喜欢从connection.execute()调用返回的原始格式。我该怎么做才能让AR始终不转换呢?我该如何设置正确的时区等?

我基本上希望通过原始数据库调用和AR来确保它始终采用相同的格式。

3 个答案:

答案 0 :(得分:1)

编辑您的区域设置文件并根据需要设置日期和时间格式

en:
  date:
    formats:
      default: "%Y-%m-%d %H:%M:%S.%Z"
      short: "%d %b"
      long: "%d %B %Y"

语法是strftime

的语法

答案 1 :(得分:1)

我会采取另一种方式:我更喜欢AR转换为/免费提供的格式。原因是配置格式会更容易(为此,参见例如to_formatted_s)。

要实现这一点,您必须避免使用connection.execute,而是始终使用YourModel.find_by_sql - 您将获得一组YourModel实例,并正确转换所有属性。有关详细信息,请参阅文档:ri find_by_sql

答案 2 :(得分:0)

差异可能是由于ActiveRecord将创建Ruby DateTime,而execute将直接从SQL引擎提供明确的字符串答案。因此,一个是Rails的默认格式,另一个是数据库的默认格式。

Thisthis可能相关。