Rails 寻找距离刚超过 24 小时的实体的查找器方法?

Rails finder method that finds an entity that is just more than 24 hours away?

我正在使用 Rails 5 和 PostgreSQL 9.5。我有一个包含以下列的 table .

cindex=# \d crypto_index_values;
                                     Table "public.crypto_index_values"
   Column   |            Type             |                            Modifiers
------------+-----------------------------+------------------------------------------------------------------
 id         | integer                     | not null default nextval('crypto_index_values_id_seq'::regclass)
 value      | double precision            |
 index_date | timestamp without time zone | not null
 created_at | timestamp without time zone | not null
 updated_at | timestamp without time zone | not null

给定一个存储在变量 "my_date" 中的时间点(例如“2017-07-29 11:10”),我将如何编写 Rails 查找器查询 return 是单个 Rails 条目,return 是具有最小 "index_date" 且距离 "my_date" 至少 24 小时的行?所以如果我有这个 table 数据

 14 | 133.951211424387 | 2017-07-31 19:10:03.235566 | 2017-07-29 19:10:03.267727 | 2017-07-31 19:10:03.267727
 15 | 133.951211424387 | 2017-07-31 19:20:03.59569  | 2017-07-28 19:20:03.629418 | 2017-07-31 19:20:03.629418
 16 | 139.104155235946 | 2017-07-31 19:30:08.037045 | 2017-07-31 19:30:08.04715  | 2017-07-31 19:30:08.04715

在我的例子中,我希望查询到 return id 为“15”的行,因为 id 为“14”的行距离我的例子不是 24 小时。通常这种查询会起作用

CryptoIndexValue.where('index_date = ?', my_date - 1)

但由于恰好 24 小时后没有条目,所以没有。

您应该结合使用 > 运算符和 order

CryptoIndexValue.order(:index_date).find_by('index_date > ?', DateTime.now - 24.hours)

我认为您的示例值不太有效——至少我看不到您如何从具有该索引日期的 table 中选择该值,减去一天。你是说 "the row with the earliest date which is also at least 1 day in the future from my_date" 吗?

CryptoIndexValue.
  where('index_date > ?', my_date + 1.days).
  order(:my_date, :id).
  take

我在排序依据中添加了 :id,以防您需要在具有相同 index_date 的两行上打平局,但如果由于限制而无法实现,则将其删除。

也许你的意思是减去一天而不是增加一天。