2011-09-22 10 views

Odpowiedz

9

natknąłem tego, a to wygląda na przykładzie, jak rozwiązać ten problem: https://gist.github.com/995663.

Najpierw ładujący zostanie załadowany, gdy zadzwonisz pod numer mount_uploader, w którym to momencie rzeczy takie jak if image? lub elsif video? nie będą działać, ponieważ nie ma jeszcze zdefiniowanego pliku do przesłania. Będziesz potrzebował wywołać metody, gdy zamiast tego zostanie utworzona instancja klasy.

Co link dałem powyżej nie jest przepisać metodę process, tak że ma listę rozszerzeń plików i procesów tylko jeśli plik odpowiada jednemu z tych rozszerzeń

# create a new "process_extensions" method. It is like "process", except 
# it takes an array of extensions as the first parameter, and registers 
# a trampoline method which checks the extension before invocation 
def self.process_extensions(*args) 
    extensions = args.shift 
    args.each do |arg| 
    if arg.is_a?(Hash) 
     arg.each do |method, args| 
     processors.push([:process_trampoline, [extensions, method, args]]) 
     end 
    else 
     processors.push([:process_trampoline, [extensions, arg, []]]) 
    end 
    end 
end 

# our trampoline method which only performs processing if the extension matches 
def process_trampoline(extensions, method, args) 
    extension = File.extname(original_filename).downcase 
    extension = extension[1..-1] if extension[0,1] == '.' 
    self.send(method, *args) if extensions.include?(extension) 
end 

Następnie można użyć to nazwać, co kiedyś było przetwarzać

IMAGE_EXTENSIONS = %w(jpg jpeg gif png) 
DOCUMENT_EXTENSIONS = %(exe pdf doc docm xls) 
def extension_white_list 
    IMAGE_EXTENSIONS + DOCUMENT_EXTENSIONS 
end 

process_extensions IMAGE_EXTENSIONS, :resize_to_fit => [1024, 768] 

dla wersji, jest to strona na wiki carrierwave który pozwala warunkowo wersje procesowe, jeśli jesteś na> 0.5.4. https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Do-conditional-processing. Będziesz musiał zmienić kod wersji wyglądać tak:

version :big, :if => :image? do 
    process :resize_to_limit => [160, 100] 
end 

protected 
def image?(new_file) 
    new_file.content_type.include? 'image' 
end 
+0

udało mi się go wypróbować ... Będę aktualizować moją odpowiedź – keithepley

+0

Kolejna aktualizacja ... zorientowali się, jak dbać o selektywnie tworzenie wersji – keithepley

+0

Awesome! Dzięki! – manzhikov

Powiązane problemy