У меня есть следующий воображаемый класс
class A < ActiveRecord::Base
has_many :objects, -> { order(:created_at) }, class_name: 'B'
has_one :last_object, -> { order(created_at: :desc).limit(1) }, class_name: 'B'
scope :with_last_object, -> { includes(:last_object) }
end
Я добавил вторую ассоциацию для модели A и область действия, чтобы избежать запроса N + 1 в следующем случае: A.all.map(&:last_object)
. Поэтому я пишу A.all.with_last_object.map(&:last_object)
.
Но он терпит неудачу: он получает только 1 last_object
для всех экземпляров A. Из журналов Postgres
SELECT "b".* FROM "b" WHERE "b"."a_id" IN (1, 2, 3, ...) ORDER BY "b"."created_at" DESC LIMIT $1
Есть ли способ избежать проблемы N + 1 в этой ситуации?