我有一点问题。
基本上,我希望从表中获取一个项目列表,我有一个按日期排序的模型,但是在最后一个小时(DateTime.now-30.minutes..DateTime.now+30.minutes
)中有日期的项目应该出现在结果
我需要能够在结果上使用where
和其他有效记录方法,因此+
是不可能的。
目前,我得到两个结果:1个包含所有记录,1个包含时间范围内的记录,然后使用merge
,然后清除第一个数组。
我该怎么做?
答案 0 :(得分:1)
你在找这个吗?
@latest = Model1.where...
@all = Model1.all
@merged = @latest | @all
答案 1 :(得分:0)
尝试以下内容:
ORDER BY
CASE created_at
WHEN > 1.hour.ago THEN 1
ELSE 2, created_at
如果是ActiveRecord范围,它将是以下内容:
order("CASE WHEN created_at>'#{1.hour.ago.to_date}' THEN 1 ELSE 2 END, created_at")
因此,您可以使用一个查询而不是两个查询。而且你不需要合并。
如果你展示你的模特,我可以给你更详细的例子
答案 2 :(得分:0)
Model.order("date_column DESC")
怎么样?
有几种方法可以实现这一点。通常,您可以为简单定义scope,为更复杂的查询定义查找器方法。
答案 3 :(得分:0)
在SQL中,您将使用UNION
合并两个查询。 Rails不支持UNION开箱即用,但this gist中的代码应该可以解决问题。我曾尝试过一次这样的工作,但不确定它是否适合您的需求。