【问题标题】:How can I get url of image variant in model (outside of controller/view)? Active Storage如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储
【发布时间】: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 >):

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案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)
      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多