Vor*_*ane 5 postgresql activerecord ruby-on-rails
Rails真的不能正确支持PostgreSQL的间隔数据类型吗?
我不得不使用2013年的Stack Overflow答案来创建一个间隔列,现在看起来我需要使用2013年的这段代码来让ActiveRecord将间隔视为字符串以外的其他内容.
那是怎么回事?我最好只使用整数数据类型代表分钟数吗?
我遇到了类似的问题,并为 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 间隔数据类型。
| 归档时间: |
|
| 查看次数: |
962 次 |
| 最近记录: |