Rails 5 Active Storage:是否有更有效的显示多个图像附件的方法?

Rails 5 Active Storage: Is there a more efficient way of displaying multiple image attachments?

我有一个名为 Job 的模型。它有一个 Active Storage 附件。

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

我最终会对结果进行分页,但目前,JobsController#index returns 所有工作:

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 个左右,但这让我想知道是否有更有效的方法来加载多个图像。

我需要采取哪些步骤来确保快速交付图像并且对应用程序的压力最小?我是否以最有效的方式做到了?

Rails 有一种一次性检索所有关联的方法。它叫做 "eager loading",在你的情况下它看起来像这样:

@jobs = Job.with_attached_image.all

这会抓取所有 @jobs 已附加图像的内容。这是一种特殊情况,因为它使用了 Rails has_one_attached 模型属性。通常,我们处理预加载嵌套关联,如:

@jobs.includes(:image)

来源:Rails Eager Loading

预加载将使您的查询更加简单和快速。