我在Carrierwave中遇到default_url方法的问题,因为它不起作用。 我的代码看起来像这样
class ImageFileUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :small do
process :resize_to_fill => [75, 75]
end
version :thumb do
process :resize_to_fill => [120, 120]
end
version :medium do
process :resize_to_fill => [639, 426]
end
def extension_white_list
%w(jpg jpeg gif png)
end
version :thumb_default_avatar do
process :resize_to_fill => [120, 120]
end
def default_url
ActionController::Base.helpers.asset_path("fallback/" + [thumb_default_avatar.jpg,
"default_avatar.jpg"].compact.join('_'))
end
end
我有这个模型,我需要使用default_avatar图像设置其头像
class Agent < ActiveRecord::Base
mount_uploader :avatar, ImageFileUploader
end
我还在“public”文件夹中创建了一个“fallback”文件夹,其中包含default_avatar.jpg图片。
提前致谢。
答案 0 :(得分:0)
要使default_url
方法有效,您必须在small_default_avatar.jpg
中放置特定于版本的默认图片,即thumb_default_avatar.jpg
,medium_default_avatar.jpg
和public/fallback
(注意在公共)文件夹中。因此,如果您没有为记录上传图片,则CarrierWave
会显示default_url
的图片,而不是显示损坏的图片图标。
<强>更新强>
根据ImageFileUploader
共享的代码,您要创建 4个版本的上传图片,即:small
,:thumb
,:medium
和:thumb_default_avatar
。这就是为什么,从逻辑上讲,您应该将特定于版本的默认图像放在public/fallback
文件夹中。因此,例如在您的代理程序显示视图中,如果您尝试使用版本:small
呈现图像并且在创建代理时未上载图像,则代替显示已损坏的图像,而不是版本:small
的默认图像,即{ {1}}将被选中显示。
更新2
默认网址未保存在数据库中。在运行时,small_default_avatar.jpg
检查是否为代理上载了映像。如果上传了图像,则会显示存储目录中的图像,如果未上传图像,则会直接显示默认图像。所以,不,你不应该在数据库中存储默认网址。
答案 1 :(得分:0)
当我更改了如图所示的default_url方法
时,它对我很好 def default_url
/fallback/default_avatar.jpg'
end
谢谢@Kirti Thorat,我理解你关于保存DB的解释。