Rails Carrierwave从一个版本中获取父模型

时间:2013-07-26 07:56:26

标签: ruby-on-rails ruby 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行会返回错误?我是否错误地引用了该模型?

我在这里发现了一个类似的问题但是无法适应我的情况。 Passing a parameter to the uploader / accessing a model's attribute from within the uploader / letting the user pick the thumbnail size

1 个答案:

答案 0 :(得分:3)

你是对的model方法不可用,因为version

类方法,而model是上传者的实例方法

但有办法让他们

如果您检查我在邮件中附加的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

希望这个帮助