3

我有这样的产品模型:

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

上传器型号:

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?

4

2 回答 2

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 关系。

于 2013-04-26T14:33:37.303 回答
0

您为 default_url 获得的价值是多少?

也许路径没有正确评估。

尝试这样的事情(当然更正下面的路径应该是什么):

class ProductImageUploader < CarrierWave::Uploader::Base
   ...

   def default_url
      "/assets/" + [version_name, "default.jpg"].compact.join('_')
   end
end
于 2013-04-14T08:33:46.097 回答