Стили в Paperclip, только если это изображение [rails] - PullRequest
8 голосов
/ 27 мая 2010

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

Я бы хотел добавить это в мою модель:

has_attached_file :attachment, :styles => { :medium => "300x300>", :thumb => "100x100>" }

, но он должен выполнять стили только , если это изображение. Я попытался добавить

if :attachment_content_type =~ /^image/

но это не сработало.

Ответы [ 3 ]

15 голосов
/ 27 мая 2010

Вы можете использовать обратный вызов before_<attachment>_post_process, чтобы остановить создание миниатюр для не изображений. Если вы вернете false в обратном вызове, попыток использовать стили не будет.

См. Раздел «События» в документах

  before_attachment_post_process :allow_only_images

  def allow_only_images
    if !(attachment.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$})
      return false 
    end
  end 
3 голосов
/ 26 августа 2012

Может быть, вам нужно что-то вроде этого:

:styles => lambda { |attachment| 
    !attachment.instance.image? ? {} : {:thumb => "80x24", :preview => "800x600>"} 
}

И определите метод в вашей модели:

def image?
   attachment.content_type.index("image/") == 0
end
1 голос
/ 24 сентября 2013

Вы можете использовать на своей модели

    `has_attached_file :avatar,
      :styles => lambda { |a| if a.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$}
                          { 
                            :thumb => "100x100#",
                            :medium => "300x300>",

                          }
                        else
                          Hash.new
                        end
                        },:default_url => "/missing.png"`
...