我正在为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'
,这完全有道理。现在我不知道从哪里开始。
非常感谢任何建议!提前谢谢。
答案 0 :(得分:1)
我认为您非常接近 - 根据您所描述的关联,您应该能够稍微更改includes
语句。而不是includes(:contacts, :people)
,请尝试includes(people: :contacts)
。这将通过人们获得所有联系。如果你在办公室和联系人之间建立了很多关系,你甚至可以将其归结为includes(:contacts)
。