Возможно ли иметь динамический путь хранения с carrierwave? - PullRequest
3 голосов
/ 12 декабря 2011

Я начинаю с carrierwave для загрузки файлов и до сих пор доволен этим. Мои файлы хранятся на amazon s3, что было довольно просто и работает надежно.

Теперь у меня есть модель с именем pictures и имя загрузчика MainUploader. Мне нужен специальный динамический путь для сохранения этих файлов при загрузке.

Я также использую devise, и у меня есть current_user, к которому я могу получить доступ из своих видов и контроллера, но не из загрузчика carrierwave. Мне нужно, чтобы путь к файлу был что-то вроде

uploads/#{current_user.location}/#{current_user.first_name}/images

но я не могу получить доступ к current_user из загрузчика и не видел альтернатив. Возможен ли этот тип динамического пути с несущей (без переписывания большого количества этого драгоценного камня)?

Любые указатели очень ценятся. Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 14 декабря 2011

На всякий случай, если кто-то еще задается вопросом здесь из поиска Google или что-то.

Я закончил тем, что создал отношение принадлежащего к моей модели (pictures) с моделью пользователя. Затем из загрузчика carrierwave я могу сделать model.user.first_name, что эквивалентно picture.user.first_name. Таким образом, я могу поместить этот model.user в свой путь и таким образом получить доступ к любому пользовательскому атрибуту. Надеюсь, это поможет кому-то еще.

Что-то вроде:

def store_dir
    "#{model.user.first_name}/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.title}"
end

пс Обратите внимание, что я также использовал model.title, потому что я хочу, чтобы picture.title также был в пути. Не лучшая практика, хотя. Если вы сделаете это, убедитесь, что вы анализируете model.title в рабочей среде, чтобы он дал вам правильное имя папки / url.

...