我想根据特定订单对我的模型数据进行排序。
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
如何根据“Prelim,Midterm,Semi-Finals,Finals”的值对其类别进行排序?
答案 0 :(得分: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(',')})")
有关按字段语法排序的更多信息,请访问: http://www.electrictoolbox.com/mysql-order-specific-field-values/
答案 1 :(得分:0)
您应该用数字替换它们:
1 = Prelim
2 = Midterm
3 = Semi-finals
4 = Finals
然后在模型中对它们进行排序,如下所示:
class Grade
...
default_scope -> { order('category ASC') }
...
end