Rails | orderメソッドを使ったデータの並び替え方の基本的な書き方と使い方のまとめ

orderメソッドとは

orderメソッドは、Active Recordクラスであるモデルに対して、データの並び替えを行うためのメソッドです。デフォルトでは、created_atカラムが昇順で並び替えられますが、orderメソッドを使用することで、任意のカラムや条件で並び替えを行うことができます。

orderメソッドの書き方

orderメソッドの書き方は、以下のようになります。

Ruby
モデル名.order(並び替えるカラム名 並び順)

並び替えるカラム名には、並び替えたいカラムを指定します。並び順には、ASCまたはDESCを指定します。ASCは昇順、DESCは降順を意味します。

昇順と降順の指定方法

orderメソッドで昇順と降順を指定する方法は、以下の通りです

Ruby
モデル名.order(並び替えるカラム名 ASC) # 昇順
モデル名.order(並び替えるカラム名 DESC) # 降順

複数のカラムを指定する方法

複数のカラムを指定して並び替えを行う場合は、以下のように記述します。

Ruby
モデル名.order(並び替えるカラム名1 並び順1, 並び替えるカラム名2 並び順2)

例えば、usersテーブルのnameカラムを昇順、ageカラムを降順で並び替える場合は、以下のように記述します。

Ruby
User.order(name: "ASC", age: "DESC")

NULL値の扱い方

デフォルトでは、NULL値は最初に並び替えられます。NULL値を最後に並び替えるには、以下のように記述します。

Ruby
モデル名.order(並び替えるカラム名 並び順 NULLS LAST)

NULLS LASTを指定することで、NULL値が最後に並び替えられます。

クエリの指定

最後に、orderメソッドには複雑なクエリを指定することもできます。例えば、関連するテーブルからデータを取得し、特定のフィールドで並べ替えることができます。

Ruby
# idで昇順に並べ替える
@posts = Post.order(:id)
# idで降順に並べ替える
@posts = Post.order(id: :desc)
# 複数のフィールドで並べ替える
@posts = Post.order(:category_id, :created_at)
# 関連するテーブルのフィールドで並べ替える
@posts = Post.joins(:category).order("categories.name DESC")

上記の例では、Postモデルのデータをid、category_id、created_atの順で並べ替えています。また、最後の例では、categoriesテーブルのnameフィールドで並べ替えるために、joinsメソッドとともにorderメソッドを使用しています。

まとめ

これらの例を参考にして、orderメソッドを使用して簡単なクエリを作成することができます。しかし、複雑なクエリを作成する場合は、SQLの知識が必要になるため、事前に学習しておくことが望ましいです。