ruby-on-rails - 如何获取 Active Storage 图像的 url

标签 ruby-on-rails ruby ruby-on-rails-5 rails-activestorage

我想通过 api 获取带有附加图像的记录列表作为链接或文件。

我有一个简单的模型:

class Category < ApplicationRecord
  has_one_attached :image
  validates :name, presence: true, uniqueness: true
end

下一步行动:

  def index
    @categories = Category.all.with_attached_image

    render json: @categories.to_json(include: { image_attachment: { include: :blob } })
  end

这是我获得图像对象的唯一方法。

我看到下一个结果:

{"id":4,"name":"Cat1","description":""},
{"id":1,"name":"Cat2","description":"","image_attachment":
  {"id":8,"name":"image","record_type":"Category","record_id":1,"blob_id":8,"created_at":"2018-06-09T13:45:40.512Z","blob":
  {"id":8,"key":"3upLhH4vGxZEhhf3TaAjDiCW","filename":"Screen Shot 2018-06-09 at 20.43.24.png","content_type":"image/png","metadata":
  {"identified":true,"width":424,"height":361,"analyzed":true},"byte_size":337347,"checksum":"Y58zbYUVOlZRadx81wxOJA==","created_at":"2018-06-09T13:45:40.482Z"}}},
...

我可以在这里看到文件名。但是文件位于不同的文件夹中,对我来说这似乎不是一种获取和链接到文件的便捷方式。

我找不到关于此的任何信息。

已更新

根据 iGian 解决方案,我的代码变为:

  def index
    @categories = Category.all.with_attached_image

    render json: @categories.map { |category|
      category.as_json.merge({ image: url_for(category.image) })
    }
  end

最佳答案

对于我的 User哪个has_one_attached :avatar我可以通过 <%= image_tag url_for(user.avatar) %> 在我的 View 中获取 url . 所以,在 Controller 中我只使用 url_for(user.avatar)

对于 Category哪个has_one_attached :image :

url_for(category.image)

关于ruby-on-rails - 如何获取 Active Storage 图像的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775686/

相关文章:

ruby - ruby 中的 400 个错误请求但不是 curl

ruby - 在 Views 文件夹中渲染 HTML 文件会生成字符串 Sinatra

ruby-on-rails - Mongoid - 同一个外域的两个逆域

ruby-on-rails - Rails 5 自定义初始化器不工作

ruby-on-rails - Rails 5 - 如何使用 OR 条件而不是 AND 获取记录

ruby-on-rails - Rails - 将序列化数组添加到现有模型

ruby-on-rails - 关于如何在 nancy 服务和服务器之间建立连接的建议

ruby-on-rails - 为什么我得到 undefined method `first' for nil :NilClass when trying to pull value from array in ruby on rails?

ruby-on-rails - 从 id 数组更新 has_many 关联

ruby-on-rails - Rails5 中似乎 sidekiq 不支持 actioncable ?