合并两个ActiveRecord数组并按created_at排序

时间:2010-08-29 05:47:07

标签: ruby-on-rails arrays sorting activerecord merge

books = Book.find(:all)
articles = Articles.find(:all)

阅读http://guides.rubyonrails.org/layouts_and_rendering.html 我知道我可以做类似的事情:

<%= render :partial => [customer1, employee1, customer2, employee2] %>

并且它将适当地使用_customer和_employee部分。

所以我想做那样的事情:

materials = books + articles
materials.sort_by_created_at

并在视图中:

<%= render :partial => materials %>

如何合并和排序两个ActiveRecord数组???感谢您的帮助!

2 个答案:

答案 0 :(得分:72)

你非常接近。使用加号来连接数组:

materials = books + articles

可以通过调用sort_by方法(从Enumerable混入)并传入前缀为&:

的属性来对组合数组进行排序

materials.sort_by(&:created_at)

对于大型结果集,这对性能不是很好。您可以考虑从父类(如Material)派生Book和Article模型(如果它们相似),使用STI(单表继承)将它们存储在同一个表中,并使用find和{{1} }子句,所以数据库可以为你做排序。

答案 1 :(得分:6)

您还可以使用Array#concat合并两个数组。