使用连接表的 ActiveRecord 查询关联计数

问题描述 投票:0回答:1

我正在开发一个事件功能,并且遇到了一个相当复杂的查询。

以下型号可供参考:

class Event < ApplicationRecord
  has_one :party

  belongs_to :host, foreign_key: :host_id, class_name: 'User'
  belongs_to :convention, optional: true
  has_many :join_requests
  
  ...
end

我想通过检查关联方的

member_limit
来检查哪些活动正在接受会员。

class Party < ApplicationRecord
  belongs_to :event
  belongs_to :host, foreign_key: :host_id, class_name: 'User'

  has_many :user_parties
  has_many :members, through: :user_parties, source: 'user'

  ...
end

Party
有一个整数列:
member_limit
——只允许一定数量的党员。

到目前为止,我的事件范围如下所示:

scope :accepting_members, -> () do
    joins(party: :user_parties).group('parties.member_limit').select('count(user_parties.user_id) < parties.member_limit')
  end

效果不太好。

我走在正确的道路上吗?

我尝试使用 COUNT() 聚合,但它只返回整数的哈希值。

sql ruby-on-rails postgresql activerecord
1个回答
0
投票

我认为你不需要任何复杂的连接,你可以这样做。

由于关系如下

  1. 活动有_一个派对
  2. 聚会有_许多用户聚会

你可以这样做。

# event.rb
scope :accepting_members, -> { party.user_parties.count < party.member_limit }

这将返回布尔值。如果未达到成员限制,则返回 true,否则返回 false。

© www.soinside.com 2019 - 2024. All rights reserved.