carrierwave的default_url方法不适合我

时间:2014-04-28 14:47:09

标签: ruby-on-rails-4 default carrierwave

我在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图片。

提前致谢。

2 个答案:

答案 0 :(得分:0)

要使default_url方法有效,您必须在small_default_avatar.jpg中放置特定于版本的默认图片,即thumb_default_avatar.jpgmedium_default_avatar.jpgpublic/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的解释。