Как создать условие в моем загрузчике, чтобы обрабатывались только определенные файлы - PullRequest
0 голосов
/ 18 января 2019

У меня есть модели User, Contact, Appliance, каждая из которых имеет уменьшенные изображения, обработанные в picture_uploader.Когда изображение Contact загружено, оно дает возможность обрезать его, в отличие от других моделей.Я следовал этому руководству , чтобы создать инструмент кадрирования.Мой picture_uploader имеет:

version :thumbnail, if: :not_svg? do
  process :crop
  process resize_to_fit: [150, 150]
end

def crop
  if model.crop_x.present?
    resize_to_limit(500, 500)
    manipulate! do |img|
      x = model.crop_x.to_i
      y = model.crop_y.to_i
      w = model.crop_w.to_i
      h = model.crop_h.to_i
      img.crop("#{w}x#{h}+#{x}+#{y}")
    end
  end
end

Для изображений, которые я загружаю, кроме модели Contact (например, в Appliance), я получаю ошибку 'undefined method: crop_x', поскольку они также пытаютсяобработать метод crop, который не должен существовать для них.

Я предполагаю, что исправление заключается в том, чтобы поместить условие в метод crop, чтобы он обрабатывал только изображения из Contacts, ноЯ не знаю, как это сделать.Я считаю, что мне нужно добавить блок if в методе crop, чтобы кадрирование обрабатывалось только в том случае, если изображение исходит из Contact, и пропускается, если оно поступает откуда-либо еще.

Я попытался обработать Contact миниатюры отдельно, дав им version thumb вместо version thumbnail, и запустив там процесс crop, но это нарушило все миниатюры изображений в представлении для Contacts.

1 Ответ

0 голосов
/ 18 января 2019

Если вы хотите проверить, определен ли метод crop_x для model, тогда стандартным способом является использование respond_to?.Поэтому замените ваше состояние следующим:

if model.respond_to? :crop_x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...