ぷろぐら×でざいん

Railsで複数ModelをSortする

Railsで複数ModelをSortする

Railsで複数ModelをSortする

やりたいこと

複数テーブルから取得したデータをまとめて日付でソートしたい。
Facebookのようなタイムフィードを作るためには、別のオブジェクトを作成日でソートしたい。
色々調べた結果、下記のやり方が簡単でした。

@books = Book.where(is_public: true).order('books.created_at DESC')
@games = Game.where(is_public: true).order('games.created_at DESC')
@musics = Music.where(is_public: true).order('musics.created_at DESC')                  
@sorted = (@books + @games + @musics).sort_by {|record| record.created_at}

降順に並び替える

# 中略
@sorted = (@books + @games + @musics).sort_by {|record| record.created_at}.reverse!

.reverse!を利用する。
これで新しいものが上に来るようになります。簡単ですね。


あとがき

Ruby on RailsはRuby自体が日本人が作ったこともあり、非常に日本語のドキュメントがたくさんあり日本人向けな印象を持っています。お陰であまり迷わず開発ができます。ただ、環境構築はPythonの方がまだ簡単な印象を受けています。一度環境構築が終わると開発自体はどちらもスムーズにできるので遜色はないですが…まだ慣れてないだけなのかも知れませんね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です