我正在尝试使用自定义选择计数进行一些分组。这是我的模特
class RescueGroup < ApplicationRecord
has_many :addresses, dependent: :delete_all
has_many :emails, -> { where(type: Contact.types[:email]) }, class_name: 'Contact'
has_many :phones, -> { where(type: Contact.types[:phone]) }, class_name: 'Contact'
end
class Contact < ApplicationRecord
self.inheritance_column = nil
enum type: [:email, :phone, :facebook]
belongs_to :rescue_group
end
class Address < ApplicationRecord
belongs_to :rescue_group
end
我正在尝试建立一个范围,该范围将允许我为每个救援组获取所有电子邮件的计数,以便可以在视图中显示该计数。
但是,如果这样做,我可以得到email_count
字段。
RescueGroup.select('rescue_groups.*, count(contacts.id) FILTER(where type = 0) as email_count')
.joins(:emails)
.includes(:addresses)
.group(:id)
.first
.email_count
但是,一旦我添加了这样的过滤器:
RescueGroup.select('rescue_groups.*, count(contacts.id) FILTER(where type = 0) as email_count')
.joins(:emails)
.includes(:addresses)
.group('rescue_groups.id, addresses.id')
.where.not(addresses: { state: 'tas' })
.first
.email_count
它将因以下错误而失败
NoMethodError: undefined method `email_count'
如果我使用第一个查询并尝试拔出email_count
,它也会失败:
RescueGroup.select('rescue_groups.*, count(contacts.id) FILTER(where type = 0) as email_count')
.joins(:emails)
.includes(:addresses)
.group(:id)
.pluck(:email_count)
所以我的问题是如何从以上两个失败的查询中获取email_count
?