Minimagick 未定义方法`width='

Minimagick undefined method `width='

我想根据宽度和高度使用特定版本的图像。所以我关注了 How-to:-Get-image-dimensions 这个 wiki,但是得到了 undefined method "width="。 我的上传者看起来像,

class S3uploaderUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # include CarrierWave::MiniMagick
  process :store_dimensions


  # Choose what kind of storage to use for this uploader:
  # storage :file
  storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end


  version :detail do
    process :quality => 90
    process :store_dimensions
  end


  version :mainVertical do
    process :quality => 80
    process :store_dimensions
    process :resize_to_fit => [240, 180]
  end

  version :mainHorizontal do
    process :quality => 80
    process :store_dimensions
    process :resize_to_fit => [240, 320]
  end

  private

  def store_dimensions
    if file && model
      model.width, model.height = ::MiniMagick::Image.open(file.file)[:dimensions]
    end
  end
end

我错过了什么?有什么建议么?谢谢

我从这个 post 中得到了一个想法。 conditional-image-resizing-with-carrierwave。效果不错。

然后我像这样更改了我的代码。

class S3uploaderUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

    version :detail do
      process :quality => 90
    end
    version :main, :if => :image?  do
        process :quality => 90
        process :resize_to_fit => [240, 180] ,:if => :horizontal?
        process :resize_to_fit => [240, 320]  ,:if => :vertical?
    end

  def image?(new_file)
      self.file.content_type.include? 'image'
  end

  def horizontal?(new_file)
    image = MiniMagick::Image.open(self.file.file)
    true if image[:height] < image[:width]
  end

  def vertical?(new_file)
    image = MiniMagick::Image.open(self.file.file)
    true if image[:height] > image[:width]
  end
end