我正在尝试在我的载波上传器上创建一个版本,该版本检查它的父模型是否有关于如何调整大小和裁剪图像的一些数据,如果不是默认调整大小来填充。我一直试图引用这里演示的模型: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
答案 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
希望这个帮助