我有这样的产品模型:
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
产品图片模型:
class ProductImage < ActiveRecord::Base
attr_accessible :image, :position, :product_id, :title
belongs_to :product
default_scope order('position ASC')
mount_uploader :image, ProductImageUploader
end
uploader 模型:
class ProductImageUploader < CarrierWave::Uploader::Base
...
def default_url
asset_path([version_name, "default.jpg"].compact.join('_'))
end
end
但是如果我不为产品上传任何图片,我将在 image_thumb 和 image 方法中得到“nil”。如果没有上传一张图片并且Product和ProductImage模型之间的关系是一对多,如何获取default_url?
最佳答案
如果您没有访问 uploader 的权限, uploader 就无法帮助您,因此您必须手动完成。您已经在使用演示者(或多或少),所以这非常简单:
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 关系。
关于ruby-on-rails - Carrierwave 和 has_many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996966/