Ruby on rails Minimagick:未定义的方法`销毁';适用于true:TrueClass auto_orient

Ruby on rails Minimagick:未定义的方法`销毁';适用于true:TrueClass auto_orient,ruby-on-rails,ruby,ruby-on-rails-4,minimagick,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/acco

我上传了一个图像,除了在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
class ImageUploader[500500]
版本:thumb_100 do
处理:调整_和_垫的大小=>[100100]
结束
版本:购物车吗
处理:将_调整为_填充=>[200200]
过程:视网膜质量=>100
结束
版本:store_page do
处理:将_调整为_填充=>[336336]
过程:视网膜质量=>100
结束
版本:product_page do
处理:将_调整为_填充=>[426426]
过程:视网膜质量=>100
结束
def扩展白名单
%w(jpg jpeg png tiff)
结束
自动定向
操纵do | img|
img=img.auto\u定向
结束
结束
结束
Auto_orient用于用户从手机上传图像,图像自动定向正确。当前的代码适用于移动上传的图像,但当我尝试从桌面上的web应用上传图像时,我收到:“undefined method`destroy!'for true:TrueClass”


我看了一下minimagick的地图,想把auto_orient换成auto_orient!但我听说minimagick没有名为auto_orient的方法!为什么用这个方法调用destroy

看起来像是操纵!在返回auto_orient时调用destroy方法(结果为布尔值(true))。因此,无法对布尔值调用delete时出错。为了解决这个问题,我添加了ruby“tap”方法,将图像传递到块中,然后立即返回图像:

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

也许现在回答你的问题已经太迟了,但我还有另一个答案,为了解决这个问题!您必须返回的故障和模块内的img

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

检查auto_orient方法是否返回true或object。大多方法用!返回true或false。尝试替换操纵方法而不是操纵!。显然,carrierwave模块没有自动定向的方法(没有!)。查看文档,看起来好像img被返回了。@Tommyixi在您的问题中,您是以相反的方式编写的。哪一个是对的?@PatrickOscity我道歉,我的意思是说没有操纵方法,只有操纵!