У меня есть CarrierWave ImageUploader, который создает пару версий исходного изображения, которые нужно обрезать на основе значений в моей модели (crop_x, crop_y, crop_w и crop_h).
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
...
version :t do
process :cropper
process :resize_to_fill => [75, 75]
end
...
def cropper
manipulate! do |img|
img = img.crop "#{model.crop_x}x#{model.crop_y}+#{model.crop_w}+#{model.crop_h}"
img
end
end
end
Проблема, с которой я столкнулся, заключается в том, что мне нужно вычислить некоторые значения обрезки по умолчанию, если у нас нет никакого набора, но я не знаю, куда поместить эту логику. Я попытался поместить это в мою модель Photo (к которой монтируется загрузчик) в before_validation, но это, кажется, вызывается после выполнения функции обрезки. Я думаю, что он либо должен быть в файле ImageUploader, либо в некотором обратном вызове, который происходит до создания превью.