Rails finder方法找到一个距离超过24小时的实体?

时间:2017-08-07 19:44:48

标签: ruby-on-rails date ruby-on-rails-5 finder subtraction

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

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 finder查询,该查询返回一个返回最小行的Rails条目“index_date”距离“my_date”至少24小时?所以,如果我有这个表数据

 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

并且给出了我的示例,我希望查询返回id为“15”的行,因为id为“14”的行不是距离我的示例24小时。通常这种查询可以正常工作

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

但由于24小时之后没有一个条目,所以没有。

2 个答案:

答案 0 :(得分:0)

您应该使用func b() int { i := 0 for ; i < 4; i++ { } ret := i fmt.Println(i); i++ fmt.Println(i); i++ fmt.Println(i); i++ fmt.Println(i); i++ return ret } 运算符与>结合使用。

order

答案 1 :(得分:0)

我不认为你的示例值非常有效 - 至少我不知道如何从具有该索引日期的表中选择该值,减去一天。你的意思是“具有最早日期的行,将来my_date至少也是1天”?

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

我在订单中添加了:id,以防您需要在具有相同index_date的两行上设置平局,但如果由于约束而无法将其删除。

可能你的意思是减去一天而不是添加。