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

问题描述 投票:0回答:1

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

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

ruby-on-rails ruby-on-rails-5 rails-activestorage
1个回答
1
投票

Rails有一种方法可以同时检索所有关联。它被称为“急切加载”,在您的情况下,它看起来像这样:

@jobs = Job.with_attached_image.all

这抓住了所有@jobs已附加的图像。这是一个特例,因为它使用了Rails has_one_attached模型属性。通常,我们处理预加载嵌套关联,如:

@jobs.includes(:image)

资料来源:Rails Eager Loading

急切加载将使您的查询更简单,更快捷。

© www.soinside.com 2019 - 2024. All rights reserved.