Rails where子句由特定属性选择

时间:2017-11-30 12:36:38

标签: ruby-on-rails

我有以下查询:

我有以下型号:

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日期。

1 个答案:

答案 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是否删除了第一个或最后一个记录,但这与附加订单子句相结合似乎可以解决问题。