2014-11-30 4 views
0

Пожалуйста, помогите мне понять, как работает CarrierWave. Я использую минимальное приложение Sinatra/DataMapper с следующим содержанием:Где загружается загрузка CarrierWave

class VideoUploader < CarrierWave::Uploader::Base 
    storage :file 
end 

class Video 
    include DataMapper::Resource 
    property :id, Serial 
    property :name, String 
    property :desc, Text 
    mount_uploader :file, VideoUploader 
end 

get '/' do 
    slim :form 
end 

post '/' do 
    video = Video.new 
    video.name = params[:name] 
    video.desc = params[:desc] 
    video.file = params[:file] 
    video.save 
    redirect '/' 
end 

Как я понял mount_uploader :file, VideoUploader строки в видео определение добавляет .video метода видео экземпляра, и я могу хранить файлы загруженные назначая params [: file]. Когда я пытаюсь отправить форму из браузера, запрос успешно создает запись в таблице DB, но я не могу найти никаких признаков существования файла в DB и public_directory. Что я делаю неправильно?

+0

'video.file.path' где видео является экземпляром' Video' – avlazarov

+0

@avlazarov я должен определить это * сообщение * действие? – askhat

+0

После того, как ваше почтовое действие удастся (где вы загружаете файл), получите видеообъект в консоли rails ('video = Video.last'), а затем' video.file.path' – avlazarov

ответ

0

Вы, вероятно, следует определить store_dir метод внутри VideoUploader класса:

class VideoUploader < CarrierWave::Uploader::Base 

    storage :file 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
.... 
end 
Смежные вопросы