Итак, у меня определены следующие модели:
class Album
has_many :photos
has_one :cover_photo, class_name: "Photo"
end
class Photo
belongs_to :photo
end
Теперь я хочу загрузить ассоциацию cover_photo
при загрузке альбомов следующим образом:
Album.where(...).includes(:cover_photo)
Но согласно документации ActiveRecord и наблюдаемому поведению, limit
(это то, что определяет ассоциация has_one
), не соблюдается. Итак, я получаю следующий запрос:
Photo Load (1.0ms) SELECT "photos".* FROM "photos" WHERE "photos"."album_id" IN (5, 4, 2, 1)
Хотя album.cover_photo
теперь возвращает один объект без запуска дополнительных запросов, очевидно, что ВСЕ фотографии загружаются из базы данных, а это не то, что я хочу.
Я знаю, что могу добиться этого с помощью JOIN и иметь доступ к атрибутам фото внутри объекта альбома, но мне действительно нужно иметь возможность использовать модель Photo
, поскольку там есть знания по интерпретации атрибутов фото .