我想根据特定顺序对模型的数据进行排序。
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
如何根据“Prelim,Midterm,Semi-Finals,Finals”的值对表格等级进行排序?
我想根据特定顺序对模型的数据进行排序。
Model: Grade
Table Column: category, value
values of category: Prelim, Midterm, Semi-finals, Finals
如何根据“Prelim,Midterm,Semi-Finals,Finals”的值对表格等级进行排序?
如果您不想按照@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