我有这样的产品型号:
class Product < ActiveRecord::Base
has_many :images, :class_name => 'ProductImage', :order => 'position DESC', :dependent => :destroy
def image_thumb
images.first.image.thumb.url
end
def image
images.first.image.url
end
end
ProductImage模型:
class ProductImage < ActiveRecord::Base
attr_accessible :image, :position, :product_id, :title
belongs_to :product
default_scope order('position ASC')
mount_uploader :image, ProductImageUploader
end
上传者模型:
class ProductImageUploader < CarrierWave::Uploader::Base
...
def default_url
asset_path([version_name, "default.jpg"].compact.join('_'))
end
end
但如果我没有为产品上传任何图片,我会在image_thumb和图像方法中获得'nil'。如果没有上传任何图片且Product和ProductImage模型之间的关系是一对多的话,如何获取default_url?
答案 0 :(得分:4)
如果您无法访问上传者,则上传者无法帮助您,因此您必须手动执行此操作。您已经使用了演示者(或多或少),所以这非常简单:
def image_thumb
if images.any?
images.first.image.thumb.url
else
asset_path("default.jpg")
end
end
def image
if images.any?
images.first.image.url
else
asset_path("thumb_default.jpg")
end
end
类似的代码适用于belongs_to关系。
答案 1 :(得分:0)
您为default_url获得的价值是多少?
可能路径没有正确评估。
尝试这样的事情(当然要纠正下面的路径到它应该是什么):
class ProductImageUploader < CarrierWave::Uploader::Base
...
def default_url
"/assets/" + [version_name, "default.jpg"].compact.join('_')
end
end