使用特定数据对模型进行排序

时间:2013-10-21 02:37:09

标签: ruby-on-rails ruby sorting

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

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

如何根据“Prelim,Midterm,Semi-Finals,Finals”的值对其类别进行排序?

2 个答案:

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