有 Student,Exam,Result 三个类,学生会考 0-n 门考试,得到 0-n 个成绩
Student
class Student < ActiveRecord::Base
has_many :exams, :through => :results
has_many :results
Exam
class Exam < ActiveRecord::Base
attr_accessible name
has_many :students, :through => :results
has_many :results
Result
class Result < ActiveRecord::Base
attr_accessible score
belongs_to :student
belongs_to :exam
比如我想对学生按照 ruby 的考试成绩排序,可以这么写:
Student.includes(:results).where('results.exam_id ='+Exam.find_by_name('ruby').id.to_s).order('results.score DESC')
(中间的 where 写的很丑,有没有更好的写法?)
但是这样只会得到参加过 ruby 考试的学生的列表,没有 ruby 成绩的学生不会返回。 如何获得包含所有学生的列表,按照 ruby 成绩排序,并且把没有 ruby 成绩的同学排在最后面呢?
谢谢。