2016-10-03 48 views
0

我想将范围添加到我的活动模型中,该活动模型按列分组我的活动,然后返回具有最早日期的活动。这是我正在尝试,但得到一个错误。Rails活动记录范围以分组对象并返回具有最低日期的对象

scope :closest, -> { 
    group(:some_column).having('date = MIN(date)') 
} 

Event.closest ==>应该从每个父节点返回最早的子事件。这里的错误:

ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column "events.id" must appear in the GROUP BY clause or be used in an aggregate function

+0

如果两个记录有相同的日期是所有记录的最小日期。那么你期望多个记录是正确的? – dnsh

+0

嗯,它实际上是DateTime,所以它不太可能有两个相同的记录,但理论上,如果它们是相同的,那么我期望两个。但这不是这里发生的事情。 –

+0

@Dinesh实际上在控制台中看到一条错误信息(编辑答案) –

回答

0

我最终使用:

scope :closest, -> { 
    where(id: Event.group(:parent_id).minimum(:date).keys) 
    } 
+0

您确定要这样吗?你正在通过parent_id分组,然后你正在查询id = parent_ids的位置。你每次只需要父母记录吗? – dnsh

+0

我觉得有些混乱,对不起。每个孩子和每个父母都有一个parent_id。所以event_one可能有id = 1和parent_id = 1(本身)。 event_two可能有id = 2和parent_id = 1。所以我试图由所有父母进行分组,然后让孩子获得最短日期 –

相关问题