В приложении я хотел отправить общедоступный URL-адрес файла в службу в обратном вызове after_create
. Таким образом, код (упрощенно) выглядел следующим образом:Carrierwave возвращает путь к файлу tmp вместо фактического в обратном вызове
class UserProfile < ApplicationRecord
mount_uploader :video, VideoUploader
after_create :send_url_to_service
private
# Just logs the URL
def send_url_to_service
Rails.logger.info video.url
end
end
К моему разочарованию, после загрузки, то send_url_to_service
обратного вызова всегда регистрируется кэшированным путь к файлу - что-то вроде 'uploads/tmp/1473900000-123-0001-0123/file.mp4'
вместо 'uploads/user_profiles/video/1/file.mp4'
. Я попытался написать метод для формирования URL-адреса из фактического пути к файлу, но он не работал, потому что файл еще не был.
Итак, вопрос в том, как получить конечный URL-адрес файла в такой ситуации?
P. S. Обратите внимание, что это вопрос, ответ на который я сам ответил, я просто хотел поделиться своим опытом.