我有一个名为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个左右,但这让我想知道是否没有更有效的加载多个图像的方法。
我需要采取哪些步骤来确保快速交付图像并且应用程序的压力最小?我是以最有效的方式做到的吗?
Rails有一种方法可以同时检索所有关联。它被称为“急切加载”,在您的情况下,它看起来像这样:
@jobs = Job.with_attached_image.all
这抓住了所有@jobs
已附加的图像。这是一个特例,因为它使用了Rails has_one_attached
模型属性。通常,我们处理预加载嵌套关联,如:
@jobs.includes(:image)
资料来源:Rails Eager Loading
急切加载将使您的查询更简单,更快捷。