Получение размеров изображения с помощью Carrierwave: неопределенный метод `[]’ для nil: NilClass

#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, тоже не работает. Как вы думаете, почему это невозможно? Какой может быть другой возможный подход?