web-dev-qa-db-ja.com

Active StorageイメージのURLを取得する方法

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
11
zishe

User which _has_one_attached :avatar_では、<%= image_tag url_for(user.avatar) %>を使用してビューでURLを取得できます。したがって、コントローラーではurl_for(user.avatar)だけを使用します

Category which _has_one_attached :image_の場合:

_url_for(category.image)
_
20
iGian

画像を取得するには、これに従ってください(has_many_attachedを使用している場合)

Model.images.map{|img| ({ image: url_for(img) })}
2
Ankit Varshney