У меня есть CarrierWave ImageUploader, который создает несколько версий исходного изображения, которые необходимо обрезать на основе значений в моей модели (crop_x, crop_y, crop_w и crorop_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, либо в каком-то обратном вызове, который происходит до создания превью.