ruby-on-rails - Minimagick:未定义方法 `destroy!' 为 true:TrueClass auto_orient

标签 ruby-on-rails ruby ruby-on-rails-4 minimagick

我上传了一张按预期工作的图片,除非我向 ImageUploader 添加了一个额外的进程 (auto_orient)。代码如下:

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  retina!

  if Rails.env.development?
    def store_dir
      "#{Rails.root}/public/uploads/account_#{model.account_id}/product_#{model.product_id}/image_#{model.id}"
    end
  elsif Rails.env.staging? || Rails.env.production?
    def store_dir
      "uploads/account_#{model.account_id}/product_#{model.product_id}/image_#{model.id}"
    end
  end

  def default_url
    "/assets/no_image_500px.png"
  end


  process :auto_orient
  process :resize_and_pad => [500, 500]

  version :thumb_100 do
    process :resize_and_pad => [100, 100]
  end

  version :shopping_cart do
    process :resize_to_fill => [200, 200]
    process :retina_quality => 100
  end

  version :store_page do
    process :resize_to_fill => [336, 336]
    process :retina_quality => 100
  end

  version :product_page do
    process :resize_to_fill => [426, 426]
    process :retina_quality => 100
  end

  def extension_white_list
    %w(jpg jpeg png tiff)
  end

  def auto_orient
    manipulate! do |img|
      img = img.auto_orient
    end
  end

end

Auto_orient 服务于用户从他们的手机上传图片的目的,图片是自动定向的。此当前代码适用于移动上传的图像,但是当我尝试从桌面上的 Web 应用程序上传图像时,我收到:“未定义的方法‘销毁!’对于 true:TrueClass"。

我看过 documentation对于 minimagick 和想法将 auto_orient 更改为 auto_orient!但后来我被告知 minimagick 没有名为 auto_orient 的方法!为什么用这种方法调用 destroy ?

最佳答案

看起来像是在操纵!在 auto_orient 返回时调用 destroy 方法(它最终是一个 bool 值 (true))。因此无法在 bool 值上调用 delete 的错误。为了解决这个问题,我添加了 ruby​​ 的“tap”方法以将图像传递给 block ,然后立即返回图像:

  def auto_orient
    manipulate! do |img|
      img.tap(&:auto_orient)
    end
  end

关于ruby-on-rails - Minimagick:未定义方法 `destroy!' 为 true:TrueClass auto_orient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27449945/

相关文章:

javascript - 从创建文本字段的下拉列表中选择 'OTHERS' 选项 Ruby on Rails - 4.2

ruby-on-rails - Ruby on Rails 中的 application.rb 和environment.rb 有什么区别?

ruby-on-rails - 如何使用 Shopify gem 处理 Shopify API 连接?

ruby-on-rails - Action Controller : Exception Caught [NoMethodError in ViewerController#show]

ruby-on-rails - 自定义 RESTful 资源的 url_for(复合键;不仅仅是 id)

regex - Rails验证RGB十六进制

ruby-on-rails - 如何使用 Rails 生成迁移以添加引用?

javascript - 在 Rails 中使用 jquery .load()

ruby - 当我知道我会做错时,我该如何构建?

ruby - Ruby 中的 java 接口(interface)等价物是什么?