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)
预加载将使您的查询更加简单和快速。
我有一个名为 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)
预加载将使您的查询更加简单和快速。