Rails 5和PostgreSQL'Interval'数据类型

Vor*_*ane 5 postgresql activerecord ruby-on-rails

Rails真的不能正确支持PostgreSQL的间隔数据类型吗?

我不得不使用2013年的Stack Overflow答案来创建一个间隔列,现在看起来我需要使用2013年的这段代码来让ActiveRecord将间隔视为字符串以外的其他内容.

那是怎么回事?我最好只使用整数数据类型代表分钟数吗?

Mad*_*mme 2

我遇到了类似的问题,并为 ActiveRecord 模型上的特定列定义阅读器方法。像这样:

class DivingResults < ActiveRecord::Base
  # This overrides the same method for db column, generated by rails
  def underwater_duration
    interval_from_db = super
    time_parts = interval_from_db.split(':')
    if time_parts.size > 1 # Handle formats like 17:04:41.478432
      units = %i(hours minutes seconds)
      in_seconds = time_parts
        .map.with_index { |t,i| t.to_i.public_send(units[i]) }
        .reduce(&:+) # Turn each part to seconds and then sum
      ActiveSupport::Duration.build in_seconds
    else # Handle formats in seconds
      ActiveSupport::Duration.build(interval_from_db.to_i)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这允许在其他地方使用ActiveSupport::Duration实例。希望 Rails 在不久的将来能够自动处理 PostgreSQL 间隔数据类型。