モデル ベースのデータを特定の順序で並べ替えたいと考えています。
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
「Prelim、Midterm、Semi-Finals、Finals」の値を持つカテゴリに基づいてテーブル Grade ベースをソートするにはどうすればよいですか?
モデル ベースのデータを特定の順序で並べ替えたいと考えています。
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
「Prelim、Midterm、Semi-Finals、Finals」の値を持つカテゴリに基づいてテーブル Grade ベースをソートするにはどうすればよいですか?
@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/
それらを数字に置き換える必要があります:
1 = Prelim
2 = Midterm
3 = Semi-finals
4 = Finals
そして、次のようにモデルでそれらを並べ替えます。
class Grade
...
default_scope -> { order('category ASC') }
...
end