Ruby On Rails: Как выбрать все дочерние элементы родительской модели и вложения Active Storage этих дочерних элементов в одном запросе SQL. Активная запись - PullRequest
0 голосов
/ 12 апреля 2020

Я ищу один запрос SQL, который мог бы выполнить это действие для меня, чтобы мне не приходилось делать так много запросов к базе данных. Я хочу выбрать все дочерние элементы модели и вложения активного хранилища, принадлежащие дочерним моделям.

class Category < ApplicationRecord
  has_many :infographics, dependent: :destroy
  has_many :videos, dependent: :destroy
  has_many :pdfs, dependent: :destroy


private 

def create_resources
    sorted_resources = (self.pdfs.with_attached_document + self.videos +  self.infographics.with_attached_photo).sort_by(&:created_at).reverse
end

end

Я хочу собрать все файлы в формате pdf, инфографики и видео для детей из моей категории. К моделям PDF и Infographics прикреплены активные элементы хранения, поэтому я хотел бы включить их в этот запрос, чтобы не делать слишком много запросов.

Кто-нибудь знает, как я могу написать это? в одном запросе?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 16 апреля 2020

Вы можете напрямую запросить вложения ActiveStorage, которые относятся к вашей категории. Один из способов сделать то, что вы хотите, с помощью одного запроса:

def create_resources
  sorted_resources = ActiveStorage::Attachment.
    where(record_type: class.name, record_id: id).
    order(created_at: :desc)
end

Таким образом, вы используете один запрос, чтобы отсортировать их все. Обратите внимание, что ваш последний метод в цепочке будет использовать ruby для их сортировки. Вместо этого, используя метод заказа, вы указываете ActiveRecord также привести ваши результаты в порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...