У меня есть модель (назовем ее 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-адрес, чем проверять последнюю загрузку.