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

Posted

技术标签:

【中文标题】合并两个 ActiveRecord 数组并按 created_at 排序【英文标题】:Merge two ActiveRecord arrays and order by created_at 【发布时间】:2011-04-05 08:30:57 【问题描述】:
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数组进行合并排序???谢谢帮助!

【问题讨论】:

【参考方案1】:

你很亲密。使用加号连接数组:

materials = books + articles

可以通过调用sort_by方法(从Enumerable混入)并传入以&amp;:为前缀的属性来对组合数组进行排序

materials.sort_by(&amp;:created_at)

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于合并两个 ActiveRecord 数组并按 created_at 排序的主要内容,如果未能解决你的问题,请参考以下文章

JAVA怎么合并两个数组

C++中怎样把两个升序数组合并

我想合并两个表 [Table1] 和 [Table2] 并按 ID 显示结果 where [Tabl1].[names] = 'any string name'?

c++两个数组合并成一个新数组

查找两个活动记录项数组之间的共同项

合并两列并按 asc 排序