【问题标题】:Rails returning UTC instead of just text with PostgresqlRails 返回 UTC 而不仅仅是使用 Postgresql 的文本
【发布时间】:2016-07-25 21:25:59
【问题描述】:

所以我正在使用 Rails (4.2.6) 和 PostgreSQL,我有一个表,其中包含一个名为 end_time 的时间类型字段,我遇到的问题是下一个:

SELECT end_time FROM group_periods;

将导致:

| end_time |
| 08:00:00 |

如您所见,它只带来包含在字段中的文本 (08:00:00),但如果我尝试在 Rails 中执行它,它会带来 end_time 一个时间对象,即使我将其转换为文本

GroupPeriod.select("end_time")

将导致:

   => #<ActiveRecord::Relation [#<GroupPeriod id:nil, end_time: "2000-01-01 08:00:00">]>

在我尝试访问 end_time 对象后,它会为 Ruby 带来一个 Time 对象。

我也试过了,结果一样:

GroupPeriod.select("end_time::text")
GroupPeriod.select("to_char(end_time, 'HH24:MI') end_time")

如何将字段 end_time 作为字符串获取,以便每当我访问该字段时,我都会得到与 Postgres 相同的结果?

编辑

由于我有数千条记录,因此没有机会在每条记录上执行 strftime 并获取字符串格式,这是我已经尝试将字段转换为文本的主要原因,因此 rails 将返回字符串而不是一个时间对象。

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4


    【解决方案1】:

    您可以覆盖模型上end_time 的属性访问器并在类型转换之前返回该属性

    类似

    class GroupPeriod < ActiveRecord::Base
      ...
    
      def end_time
        self.end_time_before_type_cast
      end
    
      ...
    end
    

    文档

    【讨论】:

    • 嘿伙计,如果我尝试像模型是哈希一样访问它,它不会触发该方法,有什么选择吗?
    • 嗯。你可以试试group_period[:end_time_before_type_cast]group_period.attributes_before_type_cast[:end_time]group_period.read_attribute_before_type_cast('end_time')
    【解决方案2】:

    Rail 的ActiveRecord 将属性值转换为Ruby 对象。因此,当您在模型上使用 ActiveRecord 的 API 进行查询时,它将返回模型对象,并将值作为相应的 Ruby 对象。

    如果你想从对象的time属性中获取时间字符串,你可以使用strftime的时间方法。

    GroupPeriod.select("end_time").first.end_time.strftime("%H:%M:%S")
    

    文档:

    【讨论】:

    • 我遇到的问题是,这不仅是一条记录,还有数千条记录,除此之外,我还尝试将字段转换为文本,因此 rails 会将其作为字符串返回,而我有不成功
    【解决方案3】:

    可以设置全局默认时间格式:

    在初始化器中:

    Time::DATE_FORMATS[:default] = '%H:%M:%S'
    

    或在您的config/locales/en.yml

    en:
      time:
        formats:
          default: '%H:%M:%S'
    

    【讨论】:

    • 这会改变整个应用程序的格式,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多