web-dev-qa-db-ja.com

Railsで通常どのようにアイテムを並べ替えますか?

私は小さな例を持っていますRailsチケットと呼ばれるアプリは、さまざまな顧客に販売された架空のチケットを表示および編集します。tickets_controller.rb内def index、足場で生成された次の標準行があります。

@tickets = Ticket.find(:all)

チケットを名前で並べ替えるには、2つの方法が考えられます。あなたはこの方法でそれを行うことができます:

@tickets = Ticket.find(:all, :order => 'name')

...またはこのように:

@tickets = Ticket.find(:all).sort!{|t1,t2|t1.name <=> t2.name}

(ヒント:Rubyドキュメントではsort!は、並べ替えられている配列を変更します。これは、並べ替えられた配列を返しますが元の配列は変更されないsortだけではありません).

通常どの戦略を使用していますか?いつ使用しますか.sort!:order => 'criteria'構文?

27
Nathan Long

使用する :order => 'criteria'データベースで実行できる単純なもの(つまり、基本的なアルファベット順または時系列順)。正しいインデックスがあると仮定すると、Rubyコードにコードを実行させるよりもはるかに高速です。

sortメソッドを使用する必要があると思う唯一の時間は、実行時に計算され、データベースに保存されていない複雑な属性がある場合です。応答か何か。その場合はsortメソッドを使用することをお勧めしますが、ページネーションを設定している場合、これにより問題が発生することに注意してください(各ページにはITS結果が順番に表示されますが、ページのセット全体としては故障している)。

34
Luke

SQLを使用したソートの方が速いため、ActiveRecord Finderまたはモデルの関連付けで順序を指定します。可能な場合は、RDBMSによって提供される機能を利用する必要があります。

2
John Topley