Rails 5 Active Storage: есть ли более эффективный способ отображения нескольких вложенных изображений? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть модель с именем Job.У него есть одно вложение Active Storage.

class Job < ApplicationRecord
  # ...
  has_one_attached :image
end

Я буду в конечном итоге разбивать результаты на страницы, но на данный момент JobsController#index возвращает все задания:

class JobsController < ApplicationController
  def index
    @jobs = Job.all
  end
end

Поскольку отображаются все 2000 заполненных строкна странице индекса видно, что загрузка всех изображений занимает много времени.

<% @jobs.each do |job| %>
<div class="listing">
  <div class="image">
    <%= image_tag url_for(job.image) %>
  </div>
  ...
</div>

В конце концов, я намерен отображать только 50 или около того за один раз, но это заставило меня задуматься, не существует ли более эффективного способа загрузки нескольких изображений.

Чтокакие шаги мне нужно предпринять, чтобы обеспечить быструю доставку изображений и минимальную нагрузку на приложение?Я делаю это наиболее эффективным способом?

1 Ответ

1 голос
/ 01 апреля 2019

В Rails есть метод для одновременного получения ассоциаций. Это называется «готовая загрузка», и в вашем случае это будет выглядеть так:

@jobs = Job.with_attached_image.all

Это захватывает все @jobs с уже прикрепленными изображениями. Это особый случай, потому что он использует атрибут модели Rails has_one_attached. Обычно мы выполняем предварительную загрузку вложенных ассоциаций, таких как:

@jobs.includes(:image)

Источник: Rails Eager Загрузка

Стремительная загрузка сделает ваши запросы намного проще и быстрее.

...