Rails - sort_by但保持活跃的记录关系

时间:2017-08-08 10:45:50

标签: ruby-on-rails

我正在开发一个项目,我有一个学生模型,它有一个名为level的属性,一个介于1和3之间的整数。目前,按级别的默认排序已被覆盖:

enum level: { "level_1" => 2, "level_2" => 0, "level_3" => 1 }

我被要求不要改变这一点。我现在需要按级别升序排序,并且一直在使用sort_by:

pupils.sort_by(&:level_asc)

使用只返回其级别的方法level_asc。这个问题是它返回了一个阻碍我的分页的数组。

有什么方法可以按级别升序排序,忽略之前声明的规则,并返回活动记录关系?我试过没有快乐的attr_accessors。

提前致谢

编辑:

我试过简单地将3合并到查询中,但是我使用的是rails 4.~而且我无法访问可以完美运行的'OR'方法:

Pupil.where(level: 1).or(where(level: 2)).or(where(level: 3))

如果我有任何方法可以在rails 4中执行上述操作,那么我将进行排序

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容在 Collections.sort(objects, new Comparator<ClientObject>() { public int compare(ClientObject object1, ClientObject object2) { int result = 0; if ((object1 != null) && (object2 != null)) { result = object1.getTranslation().compareTo(object2.getTranslation()); } return result; } }); 子句中执行此操作:

order