Carrierware: хранить файл в каталогах в соответствии с датой создания

Я использую операторскую волну для обработки моих загрузок. Я указал store_dir следующим образом:

def store_dir
  "uploads/#{Time.now.year}/#{Time.now.month}/#{Time.now.day}"
end

Загрузка файлов работает как шарм - каждый раз, когда я загружаю файл, он попадает в каталог, где он должен заканчиваться; то есть «сегодняшний каталог».

Когда я пытаюсь загрузить файл, CarrierWave динамически строит путь загрузки на основе параметров store_dir. Допустим, файл, который был загружен 1.12.2012, доступен по следующему пути на flysystem:

/uploads/2012/12/01/file.ext

будет получено несущей волной как:

/uploads/2012/12/12/file.ext

Что, очевидно, приводит к ошибке «Не удается прочитать файл».

Я пришел с двумя различными возможными решениями:

  1. Создайте отдельный файл, в котором я буду хранить фактический путь к файлу при его создании, а затем буду использовать это значение для извлечения файла.
  2. Перегрузите метод retrieve_from_store! (который является частью драгоценного камня несущей волны) и заставьте его построить путь на основе поля created_at из записи файла, а не из store_dir .

Я склоняюсь ко второму варианту, так как он не такой грязный. Тем не менее, оба чувствуют себя «не рельсами». Какой из них будет лучше использовать и почему? Или, может быть, Carrwave предлагает способ решить эту проблему?


person Ruslan    schedule 12.12.2012    source источник


Ответы (1)


Полностью угадываю здесь, но, глядя на документы, я думаю, что что-то вроде этого должно работать:

def store_dir
    "uploads/#{model.created_at.year}/#{model.created_at.month}/#{model.created_at.day}"
end
person Jiří Pospíšil    schedule 12.12.2012