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
udało mi się go wypróbować ... Będę aktualizować moją odpowiedź – keithepley
Kolejna aktualizacja ... zorientowali się, jak dbać o selektywnie tworzenie wersji – keithepley
Awesome! Dzięki! – manzhikov