Как получить URL образа Active Storage - PullRequest
0 голосов
/ 09 июня 2018

Я хочу получить список записей с прикрепленными изображениями в виде ссылок или файлов по 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

Ответы [ 2 ]

0 голосов
/ 07 августа 2018

Пожалуйста, следуйте этому при извлечении изображений (если вы используете has_many_attached )

Model.images.map{|img| ({ image: url_for(img) })}
0 голосов
/ 10 июня 2018

Для моего User, который has_one_attached :avatar, я могу получить URL в моих представлениях с помощью <%= image_tag url_for(user.avatar) %>.Итак, в контроллере я бы использовал url_for(user.avatar)

для Category, что has_one_attached :image:

url_for(category.image)
...