Ruby on rails Rails载体从版本中访问父模型

Ruby on rails Rails载体从版本中访问父模型,ruby-on-rails,ruby,carrierwave,Ruby On Rails,Ruby,Carrierwave,我正在尝试在我的carrierwave上传程序上创建一个版本,检查它的父模型是否有一些关于如何调整图像大小和裁剪图像的数据,如果没有,则执行默认的调整大小填充。我一直在尝试引用模型,如下所示: 如果我像这样运行版本代码: version :title do if model.dimensions_hash["title"] process :image_crop => [model.dimensions_hash["title"], 960, 384]

我正在尝试在我的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>'
NameError:未定义的局部变量或方法“model”#
from/Users/RyanKing/Sites/test/app/uploaders/page\u image\u uploader.rb:45:in'block in'
第45行是
process:image\u crop=>[model.dimensions\u hash[“title”],960384


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


我在这里发现了一个类似的问题,但无法适应我的情况。

你是对的
模型
方法将不可用,因为
版本

类方法,而
model
是uploader的实例方法

但是有办法得到它们

如果您检查我在邮件中附加的
链接
,则块中定义的所有内容都是
class\u 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

希望这个帮助

模型变量指向上传程序所连接的实例对象。你理解它吗?是的,所以它应该指向带有
mount\u uploader:image,PageImageUploader的模型
对吗?为什么
model
没有定义?@RyanKing错误,因为model是你上传程序的实例变量/对象,但是条件是
Uploader
上下文中的框架,即
Class.new([Your Uploader]).model=>因此
undefined`因为它类似于这个类。new([Your Uploader]).new(mount_as,mount_something)。model`检查我曾尝试过类似这样做,但失败:
进程resize_to_limit:[20482048],如果model.attachmentable_type=“Page”
。似乎无法通过这种方式访问
model
`