正如标题所述,我想做一个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中这样排序?
答案 0 :(得分:3)
Course.all.sort_by { |course| array_of_years.index(course.year) }
反向:
Course.all.sort_by { |course| -array_of_years.index(course.year) }