2

我正在尝试在我的carrierwave上传器上创建一个版本,以检查它的父模型是否有一些关于如何调整图像大小和裁剪图像的数据,如果没有,则执行默认调整大小来填充。我一直在尝试引用此处演示的模型:https ://github.com/carrierwaveuploader/carrierwave

如果我像这样运行版本代码:

version :title do
      if model.dimensions_hash["title"]
            process :image_crop => [model.dimensions_hash["title"], 960, 384]
      else
            process :resize_to_fill => [960, 384]
      end
  end

我收到此错误:

NameError: undefined local variable or method `model' for #<Class:0x007f9eae7cfed0>
    from /Users/RyanKing/Sites/test/app/uploaders/page_image_uploader.rb:45:in `block in <class:PageImageUploader>'

第 45 行是process :image_crop => [model.dimensions_hash["title"], 960, 384


如果 if 语句返回 true,为什么第 45 行返回错误?我是否错误地引用了模型?

我在这里发现了一个类似的问题,但无法适应我的情况。将参数传递给上传者/从上传者中访问模型的属性/让用户选择缩略图大小

4

1 回答 1

3

好吧,您是对的model方法将不可用,因为version

class 方法,而 whilemodel是上传器的实例方法

但有办法得到它们

如果您检查link我在邮件中附加的所有内容,那么在块内定义的所有内容都会class_eval考虑到这一点,您可以像这样修改您的代码

version :title do
  process :image_crop => [960, 384],:if => :has_title?
  process :resize_to_fill => [960, 384] ,:if => :has_not_title?

  def has_title?
     model.dimensions_hash["title"].present?
  end

  def has_not_title?
    not(has_title?)
  end
end

希望这有帮助

于 2013-08-02T06:40:17.890 回答