2
所以,我做這樣的事情:will_paginate,包括和順序由連接表
user.students.includes(:exams).ungraded.paginate(:page =>
params[:page]).order("exams.created_at desc")
然而,這會導致一個微妙的問題。某處在活動記錄的膽量,限制使得它做對學生證的一個獨特的,就像這樣:
SELECT DISTINCT "students".id, exams.id AS alias_0 FROM "students"
LEFT OUTER JOIN "exams" ON "exams"."student_id" = "students"."id"
WHERE "students"."ready_for_grading" = 't' ORDER BY exams.id LIMIT 10 OFFSET 0;
但是,這可能會導致類似的結果:
id | alias_0
----+---------
42 | 256
42 | 257
42 | 260
看這個問題?最終,限制開始了,我們並沒有像我們所期望的那樣獲取儘可能多的學生ID,因爲我們通過選擇學生ID和考試ID來「使用它們」,儘管我們真的只想要考試ID排序。
這是Rails 3.2.1和PostgreSQL 9.1。
編輯
我認爲正在發生的事情是,PAGINATE是使用查詢來獲取學生的名單,它隨後把第二查詢,但因爲左外連接,我們沒有得到明顯的學生成績,所以它「填補」了我們擁有的10個插槽,並且通常會混淆事物。我認爲這是一個錯誤,但我不確定是誰。