Ruby on rails 如何在RubyonRails中为Postgres保存无限的日期范围?

Ruby on rails 如何在RubyonRails中为Postgres保存无限的日期范围?,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我正在使用: 轨道5.2.3 Ruby 2.6.3 PostgreSQL 11.2 我有一个具有字段有效日期范围的模型Foo,下面是要创建的迁移: class CreateFoos < ActiveRecord::Migration[5.2] def change create_table :foos do |t| t.daterange :effective_date_range t.timestamps end end end Ruby

我正在使用: 轨道5.2.3 Ruby 2.6.3 PostgreSQL 11.2

我有一个具有字段有效日期范围的模型Foo,下面是要创建的迁移:

class CreateFoos < ActiveRecord::Migration[5.2]
  def change
    create_table :foos do |t|
      t.daterange :effective_date_range
      t.timestamps
    end
  end
end

Ruby 2.6.3和Postgres 11.2都支持无限范围。我怎样才能让ActiveRecord与博士后友好交谈呢?

但为什么你需要无限?你能做点什么吗

[*Date.today..(300.years.from_now).to_date]
或者只是

range = [Date.today, Date.new(2300,1,1)]
如果你的计划在2300年仍然有效,打电话给我。在那之前,我将等待。:)

你可以试试

Foo.create(effective_date_range: (Date.today...Date::Infinity.new))

PostgreSQl中的值如下所示:
[2019-11-27,)

我更喜欢公认的答案,但如果有人使用不同版本的Ruby/Rails/Postgres,这也很有用:

Foo.create(effective_date_range: "[#{Date.today.to_s(:db)},)")

这可能会有帮助,我担心date和far future是唯一的选择如果你确定它会被存储,我不这么认为。是的,它会被存储。通过ruby 2.5.5、rails 5.1.7、postgres 9.6测试,所以我刚刚发现,虽然它有效:
date.today…date::Infinity.new
,但这给了我一个错误:
(-date::Infinity.new)…日期。今天
-
***ArgumentError Exception:范围的值不正确
。查找无穷可能会使系统管理员或DBA因为占用系统的响应时间而对他进行攻击。存储和搜索
=
开始日期似乎更安全。我需要确定Foo的行为以及与Foo c交互的任何对象的行为除了它的实际值之外,还有一个关于极限存在的条件。我希望代码的目的可以通过查看它来轻松理解。我可以为300年后的极限创建一个值,但这需要任何与Foo交互的对象知道我选择的表示不存在的极限的特定值。但是Ruby和Postgres都支持无限的日期范围。我相信Ruby和Postgres能够实现这种数据结构,而无需无限计算。
Foo.create(effective_date_range: "[#{Date.today.to_s(:db)},)")