现在,我需要将该段好的SQL转换成一个不错的Active Record查询(Rails 3)。;-)
我有2个型号:
培训 has_many:training_histories
TrainingHistory 所属类别:培训
如何编写范围以获取下面的SQL检索的结果?
SELECT tc.id, tc.name, tc.order, th.id as history_id, th.finished_at, th.score FROM trainings tc LEFT OUTER JOIN training_histories th ON th.training_id = tc.id and th.id = (SELECT th1.id from training_histories th1 where th1.training_id = tc.id and th1.finished_at is not null order by th1.finished_at desc limit 1) WHERE tc.id > 4 AND tc.id < 8 GROUP BY tc.id ORDER BY tc.order_by ASC, tc.id ASC
我想检索TRAININGS的所有记录,并添加TRAINING_HISTORIES的最后一个有效(也称为完成)的关联记录。
有什么建议 ?
谢谢
对于rails 3,请尝试以下操作:
Training.select("trainings.id, trainings.name, trainings.order, trainings.id AS history_id, training_histories.finished_at, training_histories.score"). joins("LEFT OUTER JOIN training_histories ON training_histories.training_id = trainings.id AND training_histories.id = (SELECT th1.id FROM training_histories th1 WHERE th1.training_id = tc.id AND th1.finished_at IS NOT NULL ORDER BY th1.finished_at DESC LIMIT 1)"). where("trainings.id > 4 AND trainings.id < 8"). group("trainings.id"). order("trainings.order_by ASC, trainings.id ASC")
基本上,您只是将预先编写的查询转换为Rails 3 finder方法。