Действие :recache
происходит только при назначении файла экземпляру модели и после успешной проверки. Так что плагин recache
здесь не тот, который вам нужен.
Всякий раз, когда Shrine загружает файл, он включает параметр :action
в эту загрузку, и это то, что соответствует при регистрации блока process
. В настоящее время это не задокументировано, но upload_endpoint
включает action: :upload
, поэтому просто используйте process(:upload)
:
process(:upload) do |io, context|
# ...
end
В вашем блоке :rack_response
uploaded_file
теперь будет хэшем загруженных файлов, поэтому вы не сможете вызвать #data
для него. Но вы можете просто включить их в хеш напрямую, и они должны автоматически конвертироваться в JSON.
plugin :upload_endpoint, rack_response: -> (uploaded_file, request) do
body = { data: uploaded_file, url: uploaded_file[:original].url }.to_json
[201, { "Content-Type" => "application/json" }, [body]]
end