рельсы получают общий счет во многих - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь выполнить группировку с произвольным счетчиком выбора. Вот мои модели

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 из обоих вышеперечисленных неудачных запросов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...