rails获得的总数有很多关系

时间:2019-03-21 21:50:28

标签: ruby-on-rails postgresql activerecord

我正在尝试使用自定义选择计数进行一些分组。这是我的模特

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

0 个答案:

没有答案