如何通过与ActiveRecord的可选关联来订购

时间:2018-04-10 11:40:43

标签: ruby-on-rails activerecord ruby-on-rails-5

情景:

  • 学生有很多年级进步。
  • 成绩进展属于多态可进展(主题或主题)和分数(小数)。
  • 学生可能尚未记录成绩进展 所有进步。

我需要:

  • 根据任何给定的进度,按成绩分数(最高分)排序的学生名单。
  • 可持续成绩的学生应该最后出现。
  • 如果Pupil有多个等级可用,则应使用最新等级。

我已经尝试了

Pupil.left_joins(:grade_progressions).where(grade_progressions: { progressable: progressable })
                                     .order('grade_progressions.score DESC')
然而,这不起作用,因为它排除了没有可持续成绩的学生。

使用原始SQL,这应该可以通过在LEFT JOIN上指定条件来实现,但是我找不到使用ActiveRecord对象语法执行此操作的方法。如果可能的话,我想避免将连接指定为字符串。

如何以这种方式通过可选的多态关联创建ActiveRecord查询?

1 个答案:

答案 0 :(得分:0)

Rails 5具有本机 it('test function getLanguageImagePath()', () => { const result = _myComponent.getLanguageImagePath('en'); expect(result).toEqual('assets/images/en_GB.svg'); });方法。以前您需要将联接指定为字符串或使用.left_outer_joins,这通常会产生意想不到的结果。

.includes与SQL默认OUTER JOIN不同,包括在连接表中没有匹配项的行。