У меня есть модели 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
.