1

モデル ベースのデータを特定の順序で並べ替えたいと考えています。

Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals

「Prelim、Midterm、Semi-Finals、Finals」の値を持つカテゴリに基づいてテーブル Grade ベースをソートするにはどうすればよいですか?

4

2 に答える 2

4

@titibouboul で提案されているように、テーブル内の数字に置き換えたくない場合。あなたはただすることができます。

class Grade
   CATEGORY_IN_ORDER = ["Prelim", "Midterm", "Semi-Finals", "Finals"] 
   scope :ordered_by_category, lambda {"order(FIELD(category,#{CATEGORY_IN_ORDER.join(',')}))"}
end

次に、このスコープを次のように使用できる場所ならどこでも:

 Grade.ordered_by_category.where(YOUR_CRITERIA)

スコープを定義したくない場合:

Grade.where(YOUR_CRITERIA).order("FIELD(category,#{CATEGORY_IN_ORDER.join(',')})")     

FIELD 構文による注文の詳細: http://www.electrictoolbox.com/mysql-order-specific-field-values/

于 2013-10-21T03:33:12.870 に答える
0

それらを数字に置き換える必要があります:

1 = Prelim 
2 = Midterm
3 = Semi-finals
4 = Finals

そして、次のようにモデルでそれらを並べ替えます。

class Grade
...
default_scope -> { order('category ASC') }
...
end
于 2013-10-21T02:49:24.437 に答える