Powered by SmartDoc

SortOrdering

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)