並び替えができる!Ruby on Railsのorderの使い方【初心者向け】

Ruby on Railsで書くorderメソッドの使い方について解説しています。orderを使用することによって、データベース内でソートする際に役に立ちます。開発現場でも利用するシーンがあるので、ぜひ使えるようにしておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

RubyのフレームワークのRuby on Railsには、取得した値を並び替える事ができるメソッド、orderが定義されています。それでは実際にorderを使用して並び替えを行ってみましょう。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回はorderについて学習しよう。

大石ゆかり

田島メンター!!orderはどういった機能なんでしょうか〜?

田島悠介

取得した値に対して、条件を指定して並び替えることができる機能なんだ。実際にやり方を見てみよう。

大石ゆかり

はい!

 

実際にorderを使用してみる

今回は日記システムのPostモデルで考えてみましょう。以下のようなモデルがあるとします。

create_table "posts", force: :cascade do |t|
 t.string "content"
 t.datetime "created_at", null: false
 end

これらはもともとID(モデルを作成した際に自動で作られる要素)の昇順でデータベースに格納されています。IDの昇順ということは一番昔に作った記事が一番初めにあるということです。

:id => 1
:created_at =>3.days.ago
:id =>2
:created_at =>1.days.ago
:id =>3
:created_at =>Time.zone.now

 

田島悠介

何も触っていない場合はこのような順番で並んでいるね。

大石ゆかり

昇順に並んでいる項目を、逆に降順にするときはどうしたらいいんでしょう?

田島悠介

降順にする場合は”DESC”を設定しよう。ちなみに昇順は”ASC”となるよ。

 

しかし実際に日記のサービスを作る際、通常は,時間の降順に表示をします。そこでorderを使用します。Post.rb内で以下を記述してください。

class Post < ActiveRecord::Base
  default_scope -> { order(created_at: :desc) }
end

それでは上のコードの意味を解説していきます。

default_scopeは読んだままデフォルトのスコープを定義するメソッドです。ここで定義されたスコープは全てのクエリに適用されます。

created_atの後の:descはdescendingの略で降順という意味です。

これで生成されるPostは自動的に並び替えされるようになりました。

 

今回はorderについての解説をしました。orderを使用することによって、データベース内でソートする際に役に立ちます。今回はcreated_atでソートを行いましたが、もちろん他の要素でも並び替えは可能です。これを駆使すれば、webサービスでよくみる評価順でのソートや、アイウエオ順でのソートなどに利用することができます。是非使用できるようにしておきましょう。

 

田島悠介

orderの基本的な使い方を紹介したよ。

大石ゆかり

例えば名前やidで昇順降順を逆にしたい場合はどうしたらいいですか?

田島悠介

そういうときは「’name DESC’」「’id DESC’」というように記述しよう。実際にrails sで実行して、画面を見ながら試してみると分かりやすいよ。

大石ゆかり

なるほど、やってみます!ありがとうございました!

 

[お知らせ]TechAcademyでは初心者でも8週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。RubyでWebアプリを開発したい方はご参加ください。