如何使用rails [Postgresql]

时间:2017-02-15 23:15:13

标签: ruby-on-rails-4 activerecord rails-activerecord ruby-on-rails-5 rails-postgresql

使用Active Record,如何按2列(created_at,views)排序:

1st:过去3天内创建的记录

第二:之后的所有内容都应该仅通过观看次序

为了获得与此类似的结果(请忽略日期语法):

[[2017-02-15 00:00:00 UTC, 150]],
 [2017-02-14 00:00:00 UTC, 88],
 [2017-02-13 00:00:00 UTC, 12]],
 [2016-01-14 00:00:00 UTC, 99999]],
 [2016-03-10 00:00:00 UTC, 3000]],
 [2016-11-07 00:00:00 UTC, 2000]],
 [2016-10-21 00:00:00 UTC, 1000]],
 [2016-09-03 00:00:00 UTC, 100]],
 [2016-05-18 00:00:00 UTC, 10]]

我发现" date_trunc"在Postgresql但我只需要过去3天,然后只考虑一下观看次数。

我有哪些选项,理想情况下只使用一个查询?

由于

2 个答案:

答案 0 :(得分:2)

这是一个答案,可能不是单个查询。但是,它符合您的要求。

我以User模型为例。

首先,获取创建日期为过去3天的用户。

users = User.where(:created_at => (Date.today - 3.days)..Date.today)

现在,获取创建日期不是最近3天的用户,按视图DESC排序

users2 = (User.where.not(:created_at => (Date.today - 3.days)..Date.today)).order('views desc')

现在,使用 (+)

组合两个结果

Rails Active Record对象可以使用(+)

进行合并

users3 = users + users2 会显示您的结果。

答案 1 :(得分:0)

您可以在当前日期和当前日期之间创建日期 - 3.days。在这里,您将获得从过去3天创建的所有记录。

current_date = Time.zone.now
before_date = current_date - 3.days

Ex: where(:created_at => before_date.beginning_of_day.. current_date.end_of_day).order(created_at ASC, views DESC)