我正在尝试在我的 Rails 应用程序中使用carrierwave 设置条件版本。我已经实现了似乎与此处提供的示例完全相同的内容。
除非我is_ipod?
简单地返回,否则永远不会创建该版本true
。下面的代码是我目前拥有但无法正常工作的代码。请注意我用来验证image_type
属性是否正确设置的注释部分。
version :ipod_portrait_thumb, :if => :is_ipod? do
process resize_to_fit: [150,200]
end
def is_ipod? image
model.image_type == 'iPod Screenshot'
#if (model.image_type == "iPod Screenshot")
#if (model.image_type!=nil)
#puts "+++++"+model.image_type
# if (model.image_type=="iPod Screenshot")
#puts "+++++++ I AM HERE"
# return true
# end
#end
end
如果is_ipod?
看起来像这样:
def is_ipod? image
true
end
该版本按预期创建。我错过了什么?谢谢!
更新:
我已将is_ipod?
方法编辑为如下所示:
def is_ipod? image
puts (image.path || "") + ': ' + ((model.image_type||"") == 'iPod Screenshot').to_s
model.image_type == 'iPod Screenshot'
end
将其输出到控制台:
/public/uploads/tmp/20130325-1024-15906-5363/drawing.png: false
/public/uploads/tmp/20130325-1024-15906-5363/drawing.png: false
/public/uploads/app_image/image/59/drawing.png: true
所以这个版本试图被创建三次,两次用于临时文件,一次用于最终文件。模型属性只为最终文件设置。这有关系吗?谁能告诉我这与这个例子有什么不同?
class MyUploader < CarrierWave::Uploader::Base
version :monkey, :if => :is_monkey?
protected
def is_monkey? picture
model.favorite_food == 'banana'
end
end
这是我的模型类,以防万一:
class AppImage < ActiveRecord::Base
attr_accessible :app_id, :image, :image_type, :image_cache
belongs_to :app
mount_uploader :image, AppImageUploader
validates :image_type, presence: true
validates :image, presence: true
end
谢谢!