2011-07-09 51 views
15

寻找一种简单的方法,利用活动记录从两个模型中获取数据,合并数据,然后通过created_at对合并输出进行排序。结合两个查询的结果并通过created_at排序? [rails 3]

例如:

假设两种型号,评论&都喜欢belongs_to的用户

返回按日期排序的@用户的意见和喜好组合列表

我知道我可以在SQL做到这一点但我真的很喜欢积极的唱片解决方案。

谢谢!

回答

21

我相信这应该是简单的:

combined_sorted = (User.comments + User.likes).sort{|a,b| a.created_at <=> b.created_at } 
+0

这使我更接近,将两个查询结果返回到单个数组中,但它不会基于created_at将它们混合。它返回由created_at排序的评论,之后是由created_at排序的喜欢评论。我需要将所有记录混合在一起,以便获得按时间顺序排列的评论/喜欢活动 – istan

+0

此编辑内容如何? –

+0

宾果。万分感谢! – istan

0

如何像(未经测试):

class User < ActiveRecord::Base 
    scope :activities_by_date, :joins(:comments).joins(:likes).order("created_at desc") 
end 

然后,你可以做@user.activities_by_date,让数据库完成所有的工作

+0

不适用于我。 –

+0

另外,您正在通过用户实例调用作用域。它应该是:'User.activities_by_date' –