2014-11-30 3 views
0

CarrierWave의 작동 방식을 이해하도록 도와주세요. 나는 비디오 정의가 추가 .video 방법 에 비디오 인스턴스를 mount_uploader :file, VideoUploader 문자열을 이해 에 따라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 

, 나는 을 할당 업로드를 저장할 수 나는 다음과 같은 내용으로 최소한의시나/DataMapper 응용 프로그램을 사용하고 있습니다 params [: file]을 입력하십시오. 브라우저에서 양식을 보내려고하면 DB 테이블에 요청이 성공적으로 생성되지만 DB 및 public_directory에서 파일 존재의 흔적을 찾을 수 없습니다. 내가 뭘 잘못하고있어?

+0

'비디오 내가 * 게시물이를 정의해야 해요 @avlazarov Video' – avlazarov

+0

'의 인스턴스 video.file.path' * 동작? – askhat

+0

게시물 작업이 성공한 후 (파일 업로드 위치) 레일스 콘솔 ('video = Video.last')에서 비디오 객체를 가져온 다음'video.file.path' – avlazarov

답변

0

당신은 아마 VideoUploader 클래스 내부의 store_dir 방법을 정의해야합니다 :

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