如何按相关记录的最大值对表进行排序?

bra*_*rad 6 activerecord ruby-on-rails ruby-on-rails-3 rails-activerecord

我有一个客户模型,有很多会议.

class Client < ActiveRecord::Base

  has_many :meetings

end

class Meeting < ActiveRecord::Base

  belongs_to :client

end
Run Code Online (Sandbox Code Playgroud)

我想生成一个ActiveRecord查询,它将返回按最近一次会议的顺序排序的客户端(由meeting_time列确定),但不知道如何执行此操作.我显然需要以某种方式加入表格,但我不知道如何在AR中生成合适的子查询.如何为每个客户编写仅包含1个会议的联接,特别是最近的会议(即给定meetings.client_id的meetings.meeting_time的最高值).我的数据库是PostgreSQL.

我之前遇到过类似的问题,与他们挣扎,显然没有从这个过程中学到很多东西.还可以理解指向良好资源的指针以了解这些情况.

aro*_*ero 8

像这样的东西?

Client.joins(:meetings).group('clients.id').order('max(meetings.meeting_time) DESC')
Run Code Online (Sandbox Code Playgroud)

这将:

  1. 抓住客户
  2. 和他们一起参加会议
  3. 由客户分组(id)
  4. 现在我们可以使用max(meetings.meeting_time)哪个是每个客户的最近会议
  5. 然后按最近的会议时间按降序对客户进行排序