如何对数组进行sort_by属性(数组指定“排序”)

时间:2013-10-03 20:18:49

标签: ruby-on-rails arrays sorting activerecord

正如标题所述,我想做一个sort_by,以便我的课程模型可以按其“年份”列排序,但是按照我可以指定的顺序排序。

可能的年份是:

Freshman
Sophomore
Junior
Senior

所以我想把它们变成一个数组:

array_of_years = ["Freshman", "Sophomore", "Junior", "Senior"]

按照那个数组的顺序按年份排序我的课程。

例如(伪代码如下,我只是编写了解释我要求的语法):

Course.all.sort_by{ |course| course.year, array_of_years }

这将按照array_of_years数组的顺序对它们进行排序,方法是先将所有课程命名为“Freshman”的“year”列,最后命名为“Senior”。

如果我希望它们从高级到新生分类,那么我会这样做:

Course.all.sort_by{ |course| course.year, array_of_years.reverse }

或者我可以根据自己的喜好重新排列array_of_years数组并使用第一个代码块。

有没有办法在Ruby / Rails中这样排序?

1 个答案:

答案 0 :(得分:3)

Course.all.sort_by { |course| array_of_years.index(course.year) }

反向:

Course.all.sort_by { |course| -array_of_years.index(course.year) }