我正在使用带有jquery fileupload的carrierwave来上传声音文件。 我更改了缓存目录,但我不明白为什么它会创建两次。 这是我的sound_uploader.rb:
# 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
另外,它创建了2个具有不同cache_id的缓存文件夹,我无法删除第一个缓存文件。
编辑:我放入我的SoundController
def create
puts 'HELLO WORLD!'
...
end
我注意到结果是:
AFTER CACHE
HELLO WORLD!
AFTER CACHE
BEFORE STORE
AFTER STORE
这意味着它在实际创建我的声音之前放入我的文件缓存。 我仍然不明白为什么,但它可能是解决我的问题的线索。
答案 0 :(得分:1)
将load_and_authorize_resource添加到控制器后,您可能忘记删除该行
@sound = Sound.new(params[:sound])
,这会导致资源被加载两次。这使Carrierwave也将文件移动/复制到缓存两次。
否则,在避免使用load_and_authorize_resource进行创建操作后,您的代码将无法正常工作。
答案 1 :(得分:0)
我刚发现这条线对我的问题负有责任。 我将调查更多有关原因并在此之后编辑我的帖子,但问题来自CanCan gem
class SoundsController < ApplicationController
load_and_authorize_resource
...
end
我改变了:
load_and_authorize_resource :except => [:create]