#ruby-on-rails #ruby-on-rails-4 #carrierwave #rmagick
#ruby-on-rails #ruby-on-rails-4 #carrierwave #rmagick
Вопрос:
Я пытаюсь создавать разные версии изображения в зависимости от размеров загруженного изображения, и я не понимаю, почему мой код не сохраняет значения ширины и высоты. Я использую Carrierwave. Это мой код:
class HeadUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
#Create different versions of your uploaded files:
version :thumb do
process :image_dimensions
width = @geometry.width
height = @geometry.height
if width < height
process :resize_to_limit => [30, 60]
else
process :resize_to_limit => [60, 30]
end
end
def image_dimensions
manipulate! do |img|
@geometry = { width: img.columns, height: img.rows }
end
end
end
Для строки width = @geometry.width
я получаю следующую ошибку: undefined method 'width' for nil:NilClass
Как вы думаете, в чем может быть проблема?
Комментарии:
1.
@geometry.width
неправильное обращение к свойству, оно должно быть@geometry[:width]
, также обрабатывает, вероятно, не какую-то синхронную операцию, поэтому вы не можете сразу получить ее результат.2. @zishe, спасибо за предложение. Теперь я получаю эту ошибку:
undefined method '[]' for nil:NilClass
3. Попробуйте использовать
@@geometry
, но я думаю, что это невозможно так, как вы это делаете.4. @zishe, тоже не работает. Как вы думаете, почему это невозможно? Какой может быть другой возможный подход?