orderメソッドは、Active Recordクラスであるモデルに対して、データの並び替えを行うためのメソッドです。デフォルトでは、created_atカラムが昇順で並び替えられますが、orderメソッドを使用することで、任意のカラムや条件で並び替えを行うことができます。
orderメソッドの書き方は、以下のようになります。
モデル名.order(並び替えるカラム名 並び順)
並び替えるカラム名には、並び替えたいカラムを指定します。並び順には、ASCまたはDESCを指定します。ASCは昇順、DESCは降順を意味します。
orderメソッドで昇順と降順を指定する方法は、以下の通りです
モデル名.order(並び替えるカラム名 ASC) # 昇順
モデル名.order(並び替えるカラム名 DESC) # 降順
複数のカラムを指定して並び替えを行う場合は、以下のように記述します。
モデル名.order(並び替えるカラム名1 並び順1, 並び替えるカラム名2 並び順2)
例えば、usersテーブルのnameカラムを昇順、ageカラムを降順で並び替える場合は、以下のように記述します。
User.order(name: "ASC", age: "DESC")
デフォルトでは、NULL値は最初に並び替えられます。NULL値を最後に並び替えるには、以下のように記述します。
モデル名.order(並び替えるカラム名 並び順 NULLS LAST)
NULLS LASTを指定することで、NULL値が最後に並び替えられます。
最後に、orderメソッドには複雑なクエリを指定することもできます。例えば、関連するテーブルからデータを取得し、特定のフィールドで並べ替えることができます。
# 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の知識が必要になるため、事前に学習しておくことが望ましいです。