我正在开发一个事件功能,并且遇到了一个相当复杂的查询。
以下型号可供参考:
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() 聚合,但它只返回整数的哈希值。
我认为你不需要任何复杂的连接,你可以这样做。
由于关系如下
你可以这样做。
# event.rb
scope :accepting_members, -> { party.user_parties.count < party.member_limit }
这将返回布尔值。如果未达到成员限制,则返回 true,否则返回 false。