2010-03-28 66 views
2

我有以下的模型關聯:一個學生模型和的has_many分數。Ruby on Rails的一個SQL的ActiveRecord發現平均Will_Paginate

我需要讓出自己的姓名和平均,最小,最大比分的列表。到目前爲止,我使用 student.scores.average(:得分)上的每個學生,我知道這是做每名學生一個SQL。我如何使用一個連接的sql來創建列表?

而且我將如何使用與Will_Paginate插件?

謝謝

回答

1

你想要:group:select選項Student.find。這應該爲你工作:

students = Student.all(
    :select => " 
    students.*, 
    AVG(scores.score) as avg_score, 
    MIN(scores.score) as min_score, 
    MAX(scores.score) as max_score", 
    :joins => :scores 
    :group => 'students.id') 

計算的列可用,就像真正的列,雖然他們顯然不會被保存

students.first.avg_score 
students.first.min_score 
students.first.max_score 

對於使用WillPaginate,只包括你的:網頁, :per_page,...選項並致電Student.paginate而不是find。如果事實證明分頁越來越錯號碼的,因爲:group選項的頁面,只需補充一點::total_entries => Student.count到你的論點

相關問題