【问题标题】:Ordering of relation based on associated table in rails4基于rails4中关联表的关系排序
【发布时间】:2016-06-29 05:12:23
【问题描述】:

我有以下两种型号:

class Student < ActiveRecord::Base  
  has_many :marks
end

class Mark < ActiveRecord::Base  
  belongs_to :student
end

point 是标记表中的一个字段。对于每个学生,成绩表中有许多条目。

我需要根据总分最高的顺序获取学生列表。

我尝试如下:

@students = Student.all.collect{|p| [p,p.marks.pluck(:point).sum]}
@students.sort_by { |h| h[1] }.reverse!

但它会在每个数组中返回 2 个项目,一个是对象,接下来是总分。

请问有没有更好的解决办法。

谢谢,

吉西

【问题讨论】:

    标签: ruby postgresql ruby-on-rails-4 activerecord


    【解决方案1】:

    这应该可以解决问题:

    Student.joins(:marks).select('students.*, SUM(marks.point) AS total_point').group(:id).order('total_point DESC')
    

    【讨论】:

    • 一个小小的改动给了我结果:Student.joins(:marks).select('students.*, SUM(marks.point) AS total_point').group('students.id') .order('total_point DESC') 。谢谢
    【解决方案2】:

    你可以这样做。

     Student.joins(:marks).select('id, sum(marks.point) as total_marks').group('students.id').order('total_marks desc')
    

    如果您仍然无法运行它,请修改它或让我知道。在 select 中代替 id 您可以选择任何列。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多