2013-02-08 47 views
0

我正在嘗試對提交索引進行排序。sort_by或從相關模型中按行排序

每個提交has_one :score和得分belongs_to :submission提交belongs_to :contest和競賽has_many :submissions

我要排序的列在提交submission.score.subtotal>指數

我已經試過這樣:

@submissions = submission.find(:all, :include => :score).sort_by { |s| s.scores.sub_total }.paginate(:per_page => 10, :page => params[:page]) 

我有在第一場比賽中爲所有參賽作品分配了分數,但是當我嘗試提出參賽作品>比賽第一名時(通過參數分配) ,我得到一個錯誤:

NoMethodError at /submissions 
undefined method `sub_total' for nil:NilClass 

我很確定我需要檢查零的地方,但我錯過了那裏會。

的更多信息:

def index 
    contest_id = params[:contest_id] 
    @contest = Contest.find(contest_id) 
    submission = Submission.where(:contest_id => params[:contest_id]) 
    if params[:search].blank? 
    @submissions = submission.find(:all, :include => :score).sort_by { |s| s.score.sub_total }.paginate(:per_page => 10, :page => params[:page]) 
    else 
    @submissions = submission.search(params[:search]).paginate(:per_page => 10, :page => params[:page]) 
    end 
    @search = params[:search] 
end 

回答

1

此代碼應該做你需要的東西:

@submissions = Submission.find(:all, :joins => :score, :order => 'scores.sub_total DESC').paginate(:per_page => 10, :page => params[:page]) 

我希望這有助於你

+0

獲取上一個錯誤:在'的ActiveRecord :: StatementInvalid /提交 PG ::錯誤:錯誤:缺少表格「得分」的FROM-clause條目 LINE 1:... id「WHERE」提交「。」contest_id「= 1 ORDER BY score.subt ... ^ :選擇「提交」。*從「提交」INNER JOIN「分數」ON「分數」。「submission_id」=「提交」。「id」WHERE「提交」。「contest_id」= 1 ORDER BY score.subtotal DESC'我在問題中添加了控制器信息,因爲有一個比賽.id參與,可能會丟掉查詢 –

+0

對不起,我編輯了我的答案。它應該是「:order =>'scores.sub_total'」 –

+0

好吧,這是有效的,除非它不會分頁:'NoMethodError在/提交 未定義的方法'paginate'爲#' –