SortOrderingはSQLのORDER BY句にあたるクラスで、検索するオブジェクトの順序を指定します。SordOrderingオブジェクトを生成するには、ソートに使う属性とソート順を指定します。データをフェッチするときにSortOrderingオブジェクトの配列をFetchSpecオブジェクトにセットします。この配列のソート順に従ってオブジェクトがソートされます。
lastname_sort = SortOrdering.new('last_name', SortOrdering::ASC)
firstname_sort = SortOrdering.new('first_name', SortOrdering::DESC)
sort_orderings = [lastname_sort, firstname_sort]
次にソート順を示します。ソート順を省略すると昇順に設定されます。
| ソート順 | 説明 |
|---|---|
SortOrdering::ASC |
昇順 |
SortOrdering::DESC |
降順 |
SortOrdering::CI_ASC |
昇順(アルファベットの大文字小文字を区別しない) |
SortOrdering::CI_DESC |
降順(アルファベットの大文字小文字を区別しない) |
ここで指定したソート順はSQLの発行時にORDER BY句に変換されますが、データベースの返すデータの順序とフェッチしたオブジェクトの順序は異なることがあります。これはフェッチのオブジェクトがSortOrderingによって再びソートされるためです。
SortOrdering.sort()を使うと、フェッチ時と同じようにオブジェクトをソートすることができます。引数にはオブジェクトの配列とSortOrderingオブジェクトの配列を与えます。sort()はソートしたオブジェクトの配列を返します。
lastname_sort = SortOrdering.new('last_name', SortOrdering::ASC)
firstname_sort = SortOrdering.new('first_name', SortOrdering::DESC)
sort_orderings = [lastname_sort, firstname_sort]
sorted_objects = SortOrdering.sort(objects, sort_orderings)