ruby-on-rails - 在带有 Ruby on Rails 的 PostgreSQL 中使用间隔

标签 ruby-on-rails ruby postgresql

我想从我的 Rails 应用程序中将持续时间(2 天、5 年...)保存为 PostgreSQL 中的间隔。

duration_min 和 duration_max 都是类似“2 天”或“5 年”的值,因此它们各自都是一个间隔:

  def change
    create_table :times do |t|
      t.interval  :duration_min
      t.interval  :duration_max
      t.timestamps
    end
  end

但是当将数据类型设置为“interval”并且 rake 返回时,数据库迁移失败:

undefined method 'interval' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x007f8615694360> 

我如何定义表格以使其接受(并理解)像“2 天”这样的输入?

最佳答案

你很接近:

class CreateExamples < ActiveRecord::Migration
  def change
    create_table :examples do |t|
      t.column :duration_min, :interval
      t.column :duration_max, :interval
      t.timestamps
    end
  end
end

使用示例:

Example.create duration_min: '2 hours', duration_max: '2 days'
#=> #<Example id: 1, duration_min: "2 hours", duration_max: "2 days", created_at: "2013-12-02 14:20:36", updated_at: "2013-12-02 14:20:36">
Example.where(%[TIMESTAMP ? - TIMESTAMP ? BETWEEN "duration_min" AND "duration_max"], DateTime.now, 10.hours.ago)
#=> #<ActiveRecord::Relation [#<Example id: 1, duration_min: "02:00:00", duration_max: "2 days", created_at: "2013-12-02 14:20:36", updated_at: "2013-12-02 14:20:36">]>

关于ruby-on-rails - 在带有 Ruby on Rails 的 PostgreSQL 中使用间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20328028/

相关文章:

ruby-on-rails - 根据特定键对具有散列元素的数组进行排序

ruby-on-rails - 为了瘦 Controller ,Rails 模型是否应该关注其他模型?

ruby-on-rails - 访问正确的数组值

ruby - Rails-4.0.2 的长安装 ri 文档

ruby - 如何从 shapefile .prj 中读取 WKT?

postgresql - “Error 42P01: relation does not exist”(PostgreSQL 中的非公共(public)模式)

postgresql - 如何更改 Heroku 上的 postgres random_page_cost?

ruby-on-rails - Rails 5 - 并发的大型视频上传和后台 FFMPEG 编码使服务器非常慢

sql - 使用 WITH 子句查询时出现 Postgres "missing FROM-clause entry"错误

ruby-on-rails - 如何创建和管理用户?