首页 > 解决方案 > 如何获取存储在 Rails 控制器的活动存储中的附件的 url

问题描述

如何获取存储在我的 rails 控制器的活动存储中的 has_one 模型附件的 url。因此,我将能够将其作为 json 中的 api 的完整链接发送。到目前为止,我已经尝试了以下方法,但它们中的每一个都给出了各种问题:

  1. current_user.image.service_url---- #<ActiveStorage::Attached::One:0x 的未定义方法 `service_url'....

  2. Rails.application.routes.url_helpers.rails_disk_blob_path(current_user.image, only_path: true),它给了我这样的输出:

    "/rails/blob/%23%3CActiveStorage::Attached::One:0x007f991c7b41b8%3E"

但这不是一个网址,对吧?我无法在浏览器上点击并获取图像。

  1. url_for ----

    #<Api::V1::UsersController:0x007f991c1eaa98 的未定义方法“active_storage_attachment_url”

标签: ruby-on-railsrubyrails-apirails-activestorageruby-on-rails-5.2

解决方案


rails_blob_path在控制器和模型中使用附件的方法

例如,如果您需要cover_url在控制器中分配一个变量(例如 ),首先您应该url_helpers在使用方法后rails_blob_path包含一些参数。你可以在任何模型、工人等中做同样的事情。

完整示例如下:

class ApplicationController < ActionController::Base

  include Rails.application.routes.url_helpers

  def index
    @event = Event.first
    cover_url = rails_blob_path(@event.cover, disposition: "attachment", only_path: true)
  end

end

推荐阅读