gpt4 book ai didi

ruby-on-rails - Rails 5.2 Active Storage 添加自定义属性

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:52 25 4
gpt4 key购买 nike

我有一个带有附件的模型:

class Project < ApplicationRecord
has_many_attached :images
end

当我附加并保存图像时,我还想保存附加的自定义属性 - display_order(整数)和附加图像。我想用它来对附加的图像进行排序,并按照我在此自定义属性中指定的顺序显示它们。我已经查看了 #attach 方法以及 ActiveStorage::Blob 模型的 ActiveStorage 源代码,但看起来没有内置方法来传递一些自定义元数据。

我想知道,用 ActiveStorage 解决这个问题的惯用方法是什么?在过去,我通常只是将 display_order 属性添加到代表我的附件的 ActiveRecord 模型,然后简单地将它与 .order(display_order::asc) 查询一起使用。

最佳答案

如果您需要为每个图像存储额外的数据并根据该数据执行查询,我建议提取一个 Image 模型来包装附加的 file:

# app/models/project.rb
class Project < ApplicationRecord
has_many :images, dependent: :destroy
end
# app/models/image.rb
class Image < ApplicationRecord
belongs_to :project

has_one_attached :file
delegate_missing_to :file

scope :positioned, -> { order(position: :asc) }
end
<%# app/views/projects/show.html.erb %>
<% @project.images.positioned.each do |image| %>
<%= image_tag image %>
<% end %>

请注意,上面的示例 View 导致对包含 N 个图像的项目进行 2N+1 次查询(一次查询针对项目的图像,另一次针对每个图像的 ActiveStorage::Attachment 记录,另外一次针对每个附加 ActiveStorage::Blob)。为清楚起见,我故意避免优化查询数量。

关于ruby-on-rails - Rails 5.2 Active Storage 添加自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49510195/

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