我有以下查询:
我有以下型号:
2.1.5 :025 > OnlineCourseRegistration.last
=> #<OnlineCourseRegistration id: 14392, cart_id: 15177, user_id: 7133, course_class_id: 681, created_at: "2017-10-29 23:28:45", updated_at: "2017-10-30 20:18:53", exam_attempts: 0, exam_completed_at: nil, evaluation_completed_at: nil, status: "Active", score: "", add_extension: false, retest_cart_id: nil, retest_purchased_at: nil>
...我正在运行此查询:
registrations = OnlineCourseRegistration.where(course_class_id: 123).where(status: "Completed").where("score >= ?", 80)
可能会返回同一user_id的多条记录。如果是这种情况,我想只返回最后一条记录......或者该用户的最新记录:exam_completed_at日期。
对于上下文,这里是整个循环:
registrations = OnlineCourseRegistration.where(course_class_id: 123).where(status: "Completed").where("score >= ?", 80)
if !registrations.empty?
registrations.each do |b|
email_recipients << b
end
我构建了email_recipients数组,然后将其交给邮件程序。我遇到的问题是,如果用户返回两次,那么他们会收到两封电子邮件。我只希望他们收到一封电子邮件,所以我希望返回最后一条记录(或者记录最近的exam_completed_at日期。
答案 0 :(得分:0)
以下是我提出的建议:
registrations = OnlineCourseRegistration.where(course_class_id: 842).where(status: "Completed").where("score >= ?", 80).order(exam_completed_at: :desc)
注意我在上面添加了一个订单条款,然后......
registrations = registrations.uniq_by {|u| u.user_id}
我不确定uniq_by是否删除了第一个或最后一个记录,但这与附加订单子句相结合似乎可以解决问题。