基于Rails&中的计算值排序按意愿分页问题排序

时间:2017-02-01 06:51:53

标签: ruby-on-rails

我有一个has_many得分的提交模型。在Score模型中,我得分为1: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

但它有错误:

undefined method `sorted_by_total_score' for #<Submission::ActiveRecord_Relation:0x007fdccc156d68>

我哪里做错了?谢谢。

更新:通过第九回答解决。

现在,我有另一个问题。这是pages_controller.rb中的当前代码:

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

在视图中我把分页:

<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>

代码现在应该正常工作,但是我收到了这个错误:

NoMethodError in PagesController#score_summary
undefined method `pagination' for #<Array:0x007faef8923548>

更新:已解决

如果控制器中有sort_by,则需要将这些代码放入application_controller.rb中以使分页工作。

require 'will_paginate/array' 

1 个答案:

答案 0 :(得分:1)

我无法理解你为什么再次需要Submission.all。我想你只需要对结果进行排序。

  @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}

还包括&#39; self&#39;在得分计算之前