web-dev-qa-db-ger.com

So erhalten Sie die URL des Active Storage-Images

Ich möchte eine Liste der Datensätze mit angehängten Bildern als Links oder Dateien von der API.

Ich habe ein einfaches Modell:

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

Und nächste Aktion:

  def index
    @categories = Category.all.with_attached_image

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

Nur so kann ich ein Bildobjekt erhalten. 

Und ich sehe die nächsten Ergebnisse:

{"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"}}},
...

Ich kann hier den Dateinamen sehen. Dateien befinden sich jedoch in unterschiedlichen Ordnern, und es scheint mir nicht als eine bequeme Möglichkeit zu gelten, auf die Datei zuzugreifen.

Ich konnte keine Informationen dazu finden.

Aktualisierte

Gemäß der iGian-Lösung wird mein Code:

  def index
    @categories = Category.all.with_attached_image

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

Für meine User den has_one_attached :avatar kann ich die URL in meinen Ansichten mit <%= image_tag url_for(user.avatar) %>..__ bekommen. Also würde ich im Controller nur url_for(user.avatar) verwenden.

Für Category welchen has_one_attached :image:

url_for(category.image)
7
iGian

Befolgen Sie diese Anweisungen, um Bilder abzurufen (falls Sie has_many_attached verwenden).

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