Эффективное получение количества записей «один ко многим»

#sql #ruby-on-rails #ruby #activerecord

#sql #ruby-on-rails #ruby #activerecord

Вопрос:

У меня есть две таблицы: App release_id полем) и User .

Модели

 class App < ActiveRecord::Base
  has_one :user
end

class User < ActiveRecord::Base
  belongs_to :app
end
 

Класс

 class Stats::AppOverview
  def initialize(from:, apps:)
    @from = from || Date.new(2010)
    @apps = apps
  end

  def total_count
    { apps: { total: total_app, with_user: app_with_user } }
  end

  private

  def app_since
    @apps.where('created_at >= ?', @from)
  end

  def total_app
    devices_since.count
  end

  def app_with_user
    User.where(app: app_since).count
  end
end
 

Я хотел бы вернуть

  1. количество app записей для заданного массива release_id
  2. количество app записей, принадлежащих каждому пользователю, удовлетворяющих другим критериям

Вот как я использую класс

 Stats::AppOverview.new(from: 1.month.ago.iso8601, 
  apps: App.where(release_id: [1,2,3,4,5,19,235]).total_count
#=> { apps: { total: 65, with_user: 42 } }
 

На данный момент я делаю это в двух запросах, но возможно ли поместить их в один и тот же запрос? Возможно ли это с помощью active record?

Комментарии:

1. Пытаюсь внести ясность здесь. Что означает » user связанный с числом»? Кроме того, откуда devices_since берется?

2. @BryanH Пользователь, у app_id которого есть что включено в первое предложение where .

3. Итак, вы ищете количество приложений, которые принадлежат данному пользователю И имеют определенные release_id s, верно?

4. @BryanH Да, точно

5. Хорошо, я прояснил ваш вопрос. Посмотрите, имеет ли это смысл.