Я пытаюсь выполнить группировку с произвольным счетчиком выбора. Вот мои модели
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
из обоих вышеперечисленных неудачных запросов?