这行得通!但是如果我的 JSON 返回 200 个程序,这也将打印所有这 200 个程序。但我想更改辅助方法,使其仅返回 TOP 5,即他们的百分比最高。
如何修改我的辅助方法来实现这一点?
PS:我知道这样做的最好和专业的方法可能是使用模型文件中的“范围”和“顺序”等,或者实际创建 JSON 的 ActiveRecord 查询接口......但现在已经过时了我的联盟!想用婴儿步骤来完成这件事……以后再说……
这行得通!但是如果我的 JSON 返回 200 个程序,这也将打印所有这 200 个程序。但我想更改辅助方法,使其仅返回 TOP 5,即他们的百分比最高。
如何修改我的辅助方法来实现这一点?
PS:我知道这样做的最好和专业的方法可能是使用模型文件中的“范围”和“顺序”等,或者实际创建 JSON 的 ActiveRecord 查询接口......但现在已经过时了我的联盟!想用婴儿步骤来完成这件事……以后再说……
尝试以下
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
创建一个以患者为键,以患者.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_patients 的前五个元素现在将是 2 元素数组,其中包含五位钱最多的患者,以及他们有多少钱,如下所示:
[[<Bob>, 150000], [<Mary>, 138000], [<Joe>, 125000],...]
您应该能够轻松地从中提取所需的信息。