合并两个活动记录结果

时间:2014-02-19 09:44:14

标签: ruby-on-rails activerecord

我有一点问题。

基本上,我希望从表中获取一个项目列表,我有一个按日期排序的模型,但是在最后一个小时(DateTime.now-30.minutes..DateTime.now+30.minutes)中有日期的项目应该出现在结果

我需要能够在结果上使用where和其他有效记录方法,因此+是不可能的。

目前,我得到两个结果:1个包含所有记录,1个包含时间范围内的记录,然后使用merge,然后清除第一个数组。

我该怎么做?

4 个答案:

答案 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中的代码应该可以解决问题。我曾尝试过一次这样的工作,但不确定它是否适合您的需求。