1

这行得通!但是如果我的 JSON 返回 200 个程序,这也将打印所有这 200 个程序。但我想更改辅助方法,使其仅返回 TOP 5,即他们的百分比最高。

如何修改我的辅助方法来实现这一点?

PS:我知道这样做的最好和专业的方法可能是使用模型文件中的“范围”和“顺序”等,或者实际创建 JSON 的 ActiveRecord 查询接口......但现在已经过时了我的联盟!想用婴儿步骤来完成这件事……以后再说……

4

2 回答 2

2

尝试以下

def patient_counts(program)
  sorted = program.patient_counts.sort { |a, b| b.money <=> a.money }
  sorted[0..4]
end

更新:限制为仅从数据库中获取 5 条记录

def patient_counts(program)
  program.registry_patient_counts.limit(5).order('patient_count_percentage DESC')
end
于 2013-03-03T03:35:57.547 回答
1

创建一个以患者为键,以患者.money 为值的散列。这可以通过以下方式完成:

unsorted_patients = { }
program.patient_counts.each do |patient|
    sorted_patients[patient] = patient.money
end

然后使用 sort_by 将散列排序为二维数组:

sorted_patients = unsorted_patients.sort_by { |patient, money| money }
sorted_patients.reverse!

sorted_pa​​tients 的前五个元素现在将是 2 元素数组,其中包含五位钱最多的患者,以及他们有多少钱,如下所示:

[[<Bob>, 150000], [<Mary>, 138000], [<Joe>, 125000],...]

您应该能够轻松地从中提取所需的信息。

于 2013-03-03T03:38:57.980 回答