如何获取模型中图像变体的 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 中图像的异步加载导致标签消失
如何从 URL 解析带有 Windows Phone 8 中图像的 Json 数据?动态数据