2014-01-06 94 views
0

我使用carrierwave和jquery fileupload來上傳聲音文件。 我更改了緩存目錄,但我不明白它爲什麼會創建兩次。 這裏我sound_uploader.rb:Carrierwave兩個緩存文件

# encoding: utf-8 
require 'carrierwave/processing/mime_types' 

class SoundUploader < CarrierWave::Uploader::Base 
    store :file 
    after :cache, :after_cache 
    before :store, :before_store 
    after :store, :after_store 


    def after_cache(file) 
    puts 'AFTER CACHE' 
    end 
    def before_store(file) 
    puts 'BEFORE STORE' 
    end 
    def after_store(file) 
    puts 'AFTER STORE' 
    end 

    def cache_dir 
    "#{Rails.root}/tmp/uploads" 
    end 

    def store_dir 
    "#{Rails.root}/uploads/files/#{model.user_id}/#{model.id}" 
    end 
end 

它返回在我的控制檯:

AFTER CACHE 
AFTER CACHE 
BEFORE STORE 
AFTER STORE 

再加上它創建了不同的cache_id二級緩存文件夾,我不能刪除第一個緩存文件。

編輯:我把我的SoundController

def create 
puts 'HELLO WORLD!' 
... 
end 

,我發現結果是:

AFTER CACHE 
HELLO WORLD! 
AFTER CACHE 
BEFORE STORE 
AFTER STORE 

這意味着它付諸緩存我的文件之前,實際上創造了我的聲音。 我仍然沒有得到原因,但它可能是解決我的問題的線索。

回答

0

我剛剛發現我的問題負責的行。 我將調查更多的理由,之後編輯自己的帖子,但是從康康舞的寶石來哪裏出了問題

class SoundsController < ApplicationController 
    load_and_authorize_resource 
    ... 
end 

我的改變:

load_and_authorize_resource :except => [:create] 
1

當您添加load_and_authorize_resource到控制器,你大概忘了從創建行動,這將導致resou刪除行

@sound = Sound.new(params[:sound])

需要加載兩次。這使得Carrierwave將文件移動/複製到緩存兩次。

否則,在避免load_and_authorize_resource創建操作後,您的代碼將無法工作。