7

我有一个有很多会议的客户模型。

class Client < ActiveRecord::Base

  has_many :meetings

end

class Meeting < ActiveRecord::Base

  belongs_to :client

end

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

我以前遇到过类似的问题,也遇到过类似的问题,显然没有从这个过程中学到很多东西。指向一个很好的资源来了解这些情况的指针也将不胜感激。

4

1 回答 1

10

像这样的东西?

Client.joins(:meetings).group('clients.id').order('max(meetings.meeting_time) DESC')

这将:

  1. 抢客户
  2. 加入他们的会议
  3. 按客户 (id) 分组
  4. 现在我们可以使用max(meetings.meeting_time)哪个是每个客户最近的会议
  5. 然后按最近的会议时间降序对客户进行排序
于 2013-05-11T05:15:18.670 回答