Carrierwave两个缓存文件

时间:2014-01-06 18:14:56

标签: ruby-on-rails carrierwave jquery-file-upload

我正在使用带有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

这意味着它在实际创建我的声音之前放入我的文件缓存。 我仍然不明白为什么,但它可能是解决我的问题的线索。

2 个答案:

答案 0 :(得分:1)

将load_and_authorize_resource添加到控制器后,您可能忘记删除该行

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

来自create动作的

,这会导致资源被加载两次。这使Carrierwave也将文件移动/复制到缓存两次。

否则,在避免使用load_and_authorize_resource进行创建操作后,您的代码将无法正常工作。

答案 1 :(得分:0)

我刚发现这条线对我的问题负有责任。 我将调查更多有关原因并在此之后编辑我的帖子,但问题来自CanCan gem

class SoundsController < ApplicationController
  load_and_authorize_resource
  ...
end

我改变了:

load_and_authorize_resource :except => [:create]