如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储

Posted

技术标签:

【中文标题】如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储【英文标题】:How can I get url of image variant in model (outside of controller/view)? Active Storage 【发布时间】:2019-05-01 17:30:06 【问题描述】:

我可以使用此代码获取模型中的 url (Active Storage)

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

但我需要得到调整大小的变量的 url

picture_of_car.variant(resize: "300x300").processed

例如这段代码

Rails.application.routes.url_helpers.rails_blob_path(picture_of_car.variant(resize: "300x300").processed, only_path: true)

投掷

NoMethodError (undefined method `signed_id' for #< ActiveStorage::Variant:0x0000000004ea6498 >):

【问题讨论】:

【参考方案1】:

解决方案:

Rails.application.routes.url_helpers.rails_representation_url(picture_of_car.variant(resize: "300x300").processed, only_path: true)

已提供答案here。

对于一个变体,您需要使用 rails_representation_url(variant) - 这将构建一个类似于 rails_blob_url 构建的 URL,但专门针对该变体。

【讨论】:

您可以删除 .processed 以便在第一次获取图像时延迟执行。您也可以删除 only_path: true 并调用 rails_representation_path 而不是 rails_representation_url【参考方案2】:
variant = picture_of_car
            .variant(resize: '300x300')
            .processed 

variant.service.send(:path_for, variant.key) # Absolute path to variant file

【讨论】:

【参考方案3】:

按照https://api.rubyonrails.org/classes/ActiveStorage/Variant.html 的文档,它应该是: picture_of_car.variant(resize: [300, 300]).processed.service_url

【讨论】:

你错了——在与service_url相关的部分中写到你不应该直接使用它,而是使用url_for(variant)

以上是关于如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 中图像的异步加载导致标签消失

CNN keras 中图像的混淆矩阵

Android中图像视图的边框?

如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据

如何提高 Python 中图像分类 keras 模型的准确性?

Swift导航栏中图像的动画变化