合并两个 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
混入)并传入以&:
为前缀的属性来对组合数组进行排序
materials.sort_by(&:created_at)
对于大型结果集,这在性能方面并不好。如果 Book 和 Article 模型相似,您可以考虑从父类(如 Material)派生它们,使用 STI(单表继承)将它们存储在同一个表中,并使用 find
和 order
子句,所以数据库可以为您进行排序。
【讨论】:
【参考方案2】:您也可以使用Array#concat
来合并两个数组。
【讨论】:
以上是关于合并两个 ActiveRecord 数组并按 created_at 排序的主要内容,如果未能解决你的问题,请参考以下文章
我想合并两个表 [Table1] 和 [Table2] 并按 ID 显示结果 where [Tabl1].[names] = 'any string name'?