Rails API 如何发送带有产品的附加图像作为响应

Rails API how to send attached images with the Product as response

我正在尝试将响应发送回前端客户端。

这是我要创建的响应:

{
    "data": [
        {
            "id": 1,
            "product_title": "Some item"
            "images": ["imageurl1", "imageurl2", "imageurl3"]
            // other product info
        },
        {
            "id": 2,
            "product_title": "Some item"
            "images": ["imageurl4", "imageurl5", "imageurl6"]
            // other product info
        }
    ]
}

目前它看起来像:

{
    "data": [
        {
            "id": 1,
            "product_title": "Some item"
            // other product info
        },
        {
            "id": 2,
            "product_title": "Some item"
            // other product info
        }
    ]
}

我的 product.rb 看起来像:

class Product < ApplicationRecord
  has_many_attached :images
end

有什么方法可以将附加图像包含在产品对象中?

我一直在胡思乱想,也尝试查看其他帖子,但没有找到有效的解决方案。

您可以使用 ActiveStorage 的助手 linking 文件,如 Active Storage Overview Rails Guide 中所述。

示例:

url_for(user.avatar)

下载示例 link 内容处置设置:

rails_blob_path(user.avatar, disposition: "attachment")

如果您要从序列化程序 class 或除控制器操作之外的其他内容生成 API 输出,请注意有关从 controller/view上下文:

Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: true)

这些示例使用 user.avatar,但在您的示例中,这将是 Product 模型中众多 images 之一的实例。

在决定如何在 API 中公开 URL 之前,值得阅读该指南的全部内容。例如,考虑是否需要 private/signed/authenticated URLs 因为默认情况下这些方法生成 public URLs.