Включить вложения Active Storage в запрос Active Record - PullRequest
1 голос
/ 25 марта 2019

Используя Rails 5.2 и Active Storage, я установил класс Item с некоторыми images:

class Item < ApplicationRecord
  has_many_attached :images
end

Я бы хотел использовать ActiveRecord::QueryMethods.includes для стремления- загрузить images, довольно стандартный материал Rails с has_many, но:

Item.includes(:images)
=> ActiveRecord::AssociationNotFoundError ("Association named 'images' was not found on Item; perhaps you misspelled it?")

Item.includes(:attachments)
=> ActiveRecord::AssociationNotFoundError ("Association named 'attachments' was not found on Item; perhaps you misspelled it?")

Item.includes(:active_storage_attachments)
=> ActiveRecord::AssociationNotFoundError ("Association named 'active_storage_attachments' was not found on Item; perhaps you misspelled it?")

Есть идеи, как заставить это работать?

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

ActiveStorage предоставляет метод предотвращения N + 1 запросов

Gallery.where(user: Current.user).with_attached_photos

https://api.rubyonrails.org/classes/ActiveStorage/Attached/Macros.html#method-i-has_many_attached

Итак, в вашем случае:

Item.with_attached_images
0 голосов
/ 25 марта 2019

… а я нашел ответ:

Item.reflections.keys
=> ["location", "images_attachments", "images_blobs", "taggings", "base_tags", "tag_taggings", "tags"]

Имя сгенерированной Active Storage ассоциации - images_attachments, хотя оно доступно через Item#images. Вот решение:

Item.includes(:images_attachments)
  Item Load (0.6ms)  SELECT  "items".* FROM "items" LIMIT $1  [["LIMIT", 11]]
  ActiveStorage::Attachment Load (0.6ms)  SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_type" = $1 AND "active_storage_attachments"."name" = $2 AND "active_storage_attachments"."record_id" IN ($3, $4, $5, $6, $7)  [["record_type", "Item"], ["name", "images"], ["record_id", 3], ["record_id", 2], ["record_id", 4], ["record_id", 5], ["record_id", 1]]
=> #<ActiveRecord::Relation […]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...