过滤器包含嵌套关系

时间:2016-08-21 03:37:32

标签: sql ruby-on-rails activerecord

我正在为Rails应用程序开发报告功能,用户可以联系办公室中的人员。办公室有很多人,一个人有很多联系。

我想查询在日期范围内联系过的所有办事处,以及在该日期范围内联系的所有办事处的人员,但不查询那些办事处中未与之联系的人员范围。换句话说,如果办公室里有两个人,并且有一个人在该范围内联系过,而且一个人没有,我只想包括那个在该范围内联系的人。

我开始编写的查询如下所示:

Office.includes(:contacts, :people).where('contacts.created_at >= ? AND contacts.created_at <= ?', @from_date, @to_date)

但这可以过滤联系人,而不是人。然后我尝试了这个:

Office.includes(:contacts, :people).where('people.contacts.created_at >= ? AND people.contacts.created_at <= ?', @from_date, @to_date)

但这给了我Unknown column 'voters.call_attempts.created_at',这完全有道理。现在我不知道从哪里开始。

非常感谢任何建议!提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您非常接近 - 根据您所描述的关联,您应该能够稍微更改includes语句。而不是includes(:contacts, :people),请尝试includes(people: :contacts)。这将通过人们获得所有联系。如果你在办公室和联系人之间建立了很多关系,你甚至可以将其归结为includes(:contacts)