Carrierwave два кэш-файла

Я использую Carrwave с jquery fileupload для загрузки звуковых файлов. Я меняю каталог кеша, но не понимаю, почему он создает его дважды. Вот мой 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, и я не могу удалить 1-й файл кеша.

РЕДАКТИРОВАТЬ: я вставляю свой SoundController

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

И я заметил, что результат:

AFTER CACHE
HELLO WORLD!
AFTER CACHE
BEFORE STORE
AFTER STORE

Это означает, что он помещает в кеш мой файл до того, как фактически создаст мой звук. Я до сих пор не понял, почему, но это может быть ключом к решению моей проблемы.


person GeorgesLeYeti    schedule 06.01.2014    source источник


Ответы (2)


Когда вы добавили load_and_authorize_resource в свой контроллер, вы, вероятно, забыли удалить строку

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

из действия создания, что приводит к двойной загрузке ресурса. Это заставляет Carrierwave дважды перемещать/копировать файл в кеш.

В противном случае ваш код не будет работать после того, как вы избегаете load_and_authorize_resource для действия создания.

person Juraj Paulo    schedule 23.07.2014

Я только что нашел линию, ответственную за мою проблему. Я подробнее изучу причину и отредактирую свой пост после этого, но проблема возникла из-за драгоценного камня CanCan.

class SoundsController < ApplicationController
  load_and_authorize_resource
  ...
end

Я меняю на:

load_and_authorize_resource :except => [:create]
person GeorgesLeYeti    schedule 08.01.2014