Ruby on rails 基于Rails中的计算值进行排序&排序依据将分页问题

Ruby on rails 基于Rails中的计算值进行排序&排序依据将分页问题,ruby-on-rails,Ruby On Rails,我有一个提交模型,它有很多分数。在分数模型中,我有score1:float、score2:float、score3:float、score4:float和score5:float 现在,我想根据提交的加权总分对提交进行排序。因此,我在submission.rb中创建了一个方法: def total_score scores.sum('(0.15 * scores.score1) + (0.15 * scores.score2) + (0.20 * scores.score3)

我有一个提交模型,它有很多分数。在分数模型中,我有score1:float、score2:float、score3:float、score4:float和score5:float

现在,我想根据提交的加权总分对提交进行排序。因此,我在submission.rb中创建了一个方法:

  def total_score
    scores.sum('(0.15 * scores.score1) + (0.15 * scores.score2) +
    (0.20 * scores.score3) + (0.25 * scores.score4) + (0.25 * scores.score5)')
  end

  def sorted_by_total_score
    Submission.all.sort_by(&:total_score)
  end
然后我将该方法调用到我的pages_controller.rb:

def score_summary
  @find = Submission.ransack(params[:q])
  @submissions = @find.result.includes(:user, scores: [:admin_user]).paginate(page: params[:page], per_page: 50).sorted_by_total_score
end
def score_summary
  @find = Submission.ransack(params[:q])
  @submissions = @find.result.includes(:user, scores: [:admin_user]).sort_by{|submission| -submission.total_score}
  @submissions = @submissions.pagination(page: params[:page], per_page: 50)
end
但它有一个错误:

undefined method `sorted_by_total_score' for #<Submission::ActiveRecord_Relation:0x007fdccc156d68>
在视图中,我将分页设置为:

<div class="row">
  <div class="col-md-8 col-md-offset-2 col-xs-12 text-center">
    <%= will_paginate @submissions, renderer: BootstrapPagination::Rails %>
  </div>
</div>

我不明白为什么你需要服从。再一次。我想你只需要对结果进行排序

  @submissions = @find.result.includes(:user, scores: [:admin_user]).sort_by{|submission| submission.total_score}.paginate(page: params[:page], per_page: 50)
如果希望按降序排列,可以使用

sort_by{|submission| -submission.total_score}

在计算分数之前还包括“自我”

它有效!但它从最低分到最高分排序。我怎样才能先按最高分数排序呢?谢谢。另外,如果我包括分页,它将得到错误。谢谢编辑。但是分页仍然是错误的。它表示,用于对结果进行分页的未定义方法“pagination”。比如@submissions=@submissions.paginate仍然有错误,它说是未定义的方法paginate。如果我试图删除sort_by,则分页正在工作。
  @submissions = @find.result.includes(:user, scores: [:admin_user]).sort_by{|submission| submission.total_score}.paginate(page: params[:page], per_page: 50)
sort_by{|submission| -submission.total_score}