gpt4 book ai didi

ruby-on-rails - 在 Active storage Rails 5.2 中按文件名排序多个图像

转载 作者:行者123 更新时间:2023-12-05 08:20:16 24 4
gpt4 key购买 nike

我在 Post 模型中有 has_many_attached 图像关系。在 Post show 页面上显示图像时,我想按文件名对图像进行排序。如何按文件名排序?

示例:

<% @post.images.order("id DESC").each do |image| %>

是否可以通过 active_storage_blob.filename 之类的东西按文件名排序?

最佳答案

当你将 has_many_attached 宏添加到一个类时,它实际上将以下关系添加到你的类中

  class Post < ApplicationRecord
has_many :image_attachments, -> { where(name: 'image') }, class_name: "ActiveStorage::Attachment", as: :record, inverse_of: :record, dependent: false
has_many :image_blobs, through: :image_attachments, class_name: "ActiveStorage::Blob", source: :blob
end

这意味着我们可以利用关系来处理按 filename 的排序,这实际上是 ActiveStorage::Blob 的一个属性,而不是附件。为此,我们在您的案例中引用由宏 images 定义的关系,然后 join 到它与 ActiveStorage::Blob 的自然关系> 这样我们就可以根据这些字段进行排序。

最终结果是

   <% @post.images.joins(:blobs).order('active_storage_blobs.filename ASC').each do |image| %>

现在所有图像都将按文件名排序,但是由于连接实际上不会加载任何数据,我假设您在 View 中引用文件名,我们也可以使用

   <% @post.images.includes(:blobs).references(:blobs).order('active_storage_blobs.filename ASC').each do |image| %>

使用一个查询同时加载图像和 ActiveStorage::Blob 数据,以避免原始版本可能出现的 n + 1 个问题。

关于ruby-on-rails - 在 Active storage Rails 5.2 中按文件名排序多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com