Ruby on rails Rails载体从版本中访问父模型
我正在尝试在我的carrierwave上传程序上创建一个版本,检查它的父模型是否有一些关于如何调整图像大小和裁剪图像的数据,如果没有,则执行默认的调整大小填充。我一直在尝试引用模型,如下所示: 如果我像这样运行版本代码: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]
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
`