rails 3.0 и carrierwave, как предотвратить создание версии для не-образного типа - PullRequest
3 голосов
/ 20 апреля 2011

Я изо всех сил пытаюсь достичь чего-то, что изначально казалось мне простым. В контексте приложения rails 3.0 с использованием carrierwave . Пользователь должен иметь возможность загружать документы любого типа, кроме файлов .exe. в Carriewave есть белый список

def extension_white_list
    %w(jpg jpeg gif png)
end

Я хочу, чтобы был черный список, и в моем случае это было бы проще. Во всяком случае, это не главная проблема.

для файла изображения Я установил 2 версию в своем классе загрузки.

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


  version :small do
     process :resize_to_fit => [125, 125]
  end

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

Я пытался создать изображение метода?

def image?
%w(jpg jpeg gif png).include?(filename.extension.to_s)
end

и затем вызвал его из фрагмента кода версии, чтобы предотвратить создание этой версии, когда файл не является изображением

version :thumb do
  if image?
    process :resize_to_fit => [50, 50]  
  end
end

но этот код выдает ошибку

undefined method `image?' for #<Class:0x000001017274f8> 

любая помощь будет оценена.

спасибо.

Ответы [ 2 ]

14 голосов
/ 23 сентября 2011

Вот как вы на самом деле можете это сделать. Текущая версия carrierwave теперь поддерживает обработку условных версий. Смотрите вики-страницу https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Do-conditional-processing

Чтобы создавать версии только для определенных типов, выполните следующие действия:

version :thumb, :if => :image? do
  process :resize_to_fit => [50, 50]  
end

protected

def image?(new_file)
  new_file.content_type.include? 'image'
end
0 голосов
/ 31 июля 2011

Наконец ясный и чистый ответ на этот вопрос: https://gist.github.com/995663

...