如何更改 Rails 中每个 activestorage 附件变体的文件名?

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

我正在使用 Rails 7,并且有一个带有名为“图像”的附件的模型:

IMAGE_VARIANTS  = {
  cover: [426, 426],
  medium: [1280, 1280],
  large: [1920, 1920],
  full: [2560, 2560]
}
    
has_one_attached :image do |attachable|
  for variant_name in IMAGE_VARIANTS.keys
    attachable.variant variant_name, resize_to_fit: IMAGE_VARIANTS[variant_name]
  end
end

如您所见,我有很多变体。 在我的一种观点中,我有一个下载每个变体的链接。例如:

<%= link_to rails_blob_path(@post.image.variant(:cover), disposition: "attachment"), class: "hover:underline" do %>

我发现每个下载链接都使用与原始上传文件相同的文件名。

如何重命名每个变体的文件?

ruby-on-rails rails-activestorage ruby-on-rails-7
1个回答
0
投票

您可以像这样设置链接格式

<%= link_to 'Cover', rails_blob_path(@post.image.variant(:cover)), download: "cover_#{@post.image.filename}" %>

这里

download
属性指定当用户点击超链接时将下载目标(href 属性中指定的文件)。该属性的值将是文件下载后的新名称。您可以这样指定必要的文件名

注意:最好使用

each
而不是
for
循环

has_one_attached :image do |attachable|
  IMAGE_VARIANTS.each do |variant_name, resize_to_fit|
    attachable.variant variant_name, resize_to_fit: resize_to_fit
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.