並び替えができる!Ruby on Railsのorderの使い方【初心者向け】
Ruby on Railsで書くorderメソッドの使い方について解説しています。orderを使用することによって、データベース内でソートする際に役に立ちます。開発現場でも利用するシーンがあるので、ぜひ使えるようにしておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,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アプリを開発したい方はご参加ください。