2012-08-02 14 views
5

mam tej klasy do przesyłaniawarunkowe wersje/proces z Carrierwave

class ImageUploader < CarrierWave::Uploader::Base 

    include CarrierWave::RMagick 

    process :resize_to_limit => [300, 300] 

    version :thumb do 
    process :resize_to_limit => [50, 50] 
    end 

... 

Który będzie przetwarzać oryginalny plik do 300x300 i zapisać wersję kciuka.

Chciałbym być w stanie zrobić małą/kciuk wersji tylko w oparciu o boolean w moim modelu?

Więc zrobiłem to

if :icon_only? 
process :resize_to_limit => [50, 50] 
else 
    process :resize_to_limit => [300, 300] 
end 

protected 

def icon_only? picture 
    model.icon_only? 
end 

Ale zawsze kończyło się na przetwarzanie 50x50. Nawet kiedy nie podoba Ci się to

def icon_only? picture 
    false 
end 

może mam mój składnia się wszystko w porządku z: ale próbowałem też z prośbą

if icon_only? 

Który powiedział mi, że nie nazwa metody jak that.Im utracone. ..

Odpowiedz

3

użyć :if warunkowe, tak jak poniżej:

process :resize_to_limit => [50, 50], :if => :icon_only? 
process :resize_to_limit => [300, 300], :if => ... 

nie mam faktycznie tri ale to jest udokumentowane in the code, więc powinno działać.

+0

mam tę część roboczą proces: resize_to_limit => [50, 50]: if =>: icon_only? proces: resize_to_limit => [300, 300],: if =>!: Icon_only? Ale zawsze tworzy wersję kciuka, nawet jeśli nie podano wersja: kciuk,: unless =>: icon_only? wersja: kciuk do proces: resize_to_limit => [50, 50] koniec – Jepzen

+2

Nie sądzę, że ': if =>!: Icon_only?' Będzie działać. Zdefiniuj inną funkcję ': not_icon_only?' Lub użyj procesu: 'process: resize_to_limit => [300, 300],: if => Proc.new {! Icon_only? } '. Jesteś także pewien, że twoja metoda 'icon_only?' Faktycznie działa? Zajmuje argument 'obrazek', ale potem wywołujesz' icon_only? 'Na' modelu'. –

+0

Wydawało się, że to bałagan, więc zrobiłem kolejną klasę dla uploadera tylko dla mojej ikony. Mój icon_only? metoda (na modelu) nie zajęła również nowo przypisanej wartości, a jedynie wartość domyślna z tabeli, więc nawet jeśli mam logikę do pracy, nie wiem jak mogę określić, czy powinna to być tylko ikona lub nie. Dzięki za pomoc. – Jepzen

2

Jak zaznaczył @shioyama, można użyć: jeśli chcesz określić warunek.

Jednak wykonanie warunku odwrotnego (np. !icon_only?) wymaga trochę pracy.

process :resize_to_limit => [300, 300], :if => Proc.new {|version, options| !version.send(:icon_only?, options[:file])} do