如何查找关联计数小于2的元素



我有一个问题,提取数据与一个查询。我的两个模型是这样的:

# school.rb
class School < ActiveRecord::Base
has_many :meetings
end
# meetings.rb
class Meeting < ActiveRecord::Base
belongs_to :school
belongs_to :user

# fields
# status: [accepted, not_accepted, finished]
en

我想取每个通过Userschool少于2次与状态finished的会议。我正在尝试这样做:

School.joins(:meetings).where(meetings: { user: User, status: 'finished' }).group(:id).having( 'count(meetings.id) < 2')

但如果User在每个学校有一个完成的会议。我想知道是否有可能用一个查询来解决这个问题?也许你们中的一些人知道这是否可能以及如何做到?

@Edit下面是一个更容易理解我想要接收的内容的示例:

School | User | Meeting
1.  A   | Adam | finished 
2.  A   | Adam | accepted
3.  A   | Adam | finished
4.  B   | Adam | accepted
5.  C   | John | finished
6.  D   |  -   |    -
7.  E   | John | finished

所以我想创建查询,它将返回学校B, C, D和E为用户Adam

我认为你需要在这里扭转你的想法:得到你想要的学校排除从结果,而不是试图添加额外的查询。像这样:

# Get schools with more than 1 meeting for the user
excluded_schools = School.joins(:meetings)
.where(meetings: { user: User, status: 'finished' })
.group(:id)
.having('count(meetings.id) > 1')
# Get ALL schools except for the ones you didn't want
filtered_schools = School.where.not(id: excluded_schools.select(:id))

使用select(:id)而不是pluck(:id)避免触发新的数据库查询,所以当在方法中使用时,所有这些都应该只需要一个数据库查询。当然,如果你想在一个查询中完成所有的事情,你必须在控制台中嵌套这些而不是存储在变量中。

相关内容

  • 没有找到相关文章

最新更新