1

我想根据特定顺序对模型的数据进行排序。

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

如何根据“Prelim,Midterm,Semi-Finals,Finals”的值对表格等级进行排序?

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 回答