Можно ли определить, что было загружено при загрузке нескольких файлов с помощью ActiveStorage? - PullRequest
0 голосов
/ 05 октября 2019

У меня есть модель (назовем ее Message), которая использует Active Storage с has_many_attached для хранения нескольких загрузок с помощью подпрограммы Javascript. Я хотел бы знать URL загрузок, как только они будут получены и обработаны действием Update в моем контроллере. В идеале ответ должен быть в форме строки JSON, содержащей URL-адрес файла, который только что был загружен подпрограммой Javascript.

Кроме того, чтобы выполнить цикл загрузки всех загрузок, есть ли способполучить эту информацию по мере их загрузки?

Я не использую javascript DirectUpload, предложенный в руководстве Active Storage, на случай, если вам интересно. Javascript, который я использую, отправляет файлы в пользовательское действие PATCH /message/:id/new_upload (где: id - это идентификатор записи сообщения), причем BLOB-файл является единственным параметром.

Я пыталсяиспользуйте что-то вроде этого:

  def new_upload
    @message.uploads.attach(params[:uploads])

    respond_to do |format|
      format.json  {render json: { location: "The URL would go here"} }
    end
  end

Но строка attach в начале ничего не возвращает (очевидно), все, что она делает, это сохраняет вложения. Есть ли что-нибудь, что я могу использовать, чтобы выяснить, что было просто загружено?

ОБНОВЛЕНИЕ

Мне удалось заставить это "работать", делая что-то вроде этого:

  def new_upload
    @message.uploads.attach(params[:uploads])
    upload_url = rails_blob_url(@message.uploads.blobs.last)

    respond_to do |format|
      format.json  {render json: { location: upload_url} }
    end
  end

Однако это работает только для одного вложения (последнего). К счастью, мне требуется загружать только один файл за раз, но я бы предпочел выводить URL-адрес, чем проверять последнюю загрузку.

...