web-dev-qa-db-ja.com

2つのActiveRecord配列をマージし、created_atで並べ替えます

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 %>

2つのActiveRecord配列のマージと並べ替えを行う方法???助けてくれてありがとう!

32
PeterWong

あなたはとても近いです。配列の連結はプラス記号で行われます:

_materials = books + articles_

結合された配列の並べ替えは、_sort_by_メソッド(Enumerableからミックスイン)を呼び出し、_&:_で始まる属性を渡すことで実行できます。

materials.sort_by(&:created_at)

これは、大規模な結果セットの場合、パフォーマンスの点で適切ではありません。 BookモデルとArticleモデルを似ている場合は、親クラス(Materialなど)から派生させ、STI(Single Table Inheritance)を使用して同じテーブルに格納し、findorder句。データベースがソートを実行できるようにします。

73
zetetic

Array#concatを使用して、2つの配列をマージすることもできます。

6
ryancheung