如何询问@user.photo是否存在?创建自 (class PhotoUploader < CarrierWave::Uploader)

how to ask if @user.photo exists? created from (class PhotoUploader < CarrierWave::Uploader)

我的 User 模型使用载波创建以 @user.photo.thumb 访问的图像。这不是照片模型,photoUser 中的 string column。但是,一些用户不会上传 photo,所以我想创建一个 if/else 语句来告诉我他们是否上传了照片。

<% if @user.photo %> returns true 即使用户尚未上传照片。

<% 如果@user.photo.nil? %> return false,但是在 Heroku 控制台中,对于 user,它显示 column photonil

u = User.find(5)
=> User id: 5, name: "SpongeBob ",..., photo: nil>

class User < ActiveRecord::Base
    mount_uploader :photo, PhotoUploader
end

class PhotoUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  version :thumb do
    process resize_to_fill: [150,150]
  end

  if Rails.env.production?
    storage :fog
  else
    storage :file
  end

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

这是用作头像。如果他们没有上传自己的照片,我想要一个默认头像图片。

如果您查看自述文件,您可以像这样覆盖上传器中的 default_url。所以如果没有图片,它会显示默认。

class PhotoUploader < CarrierWave::Uploader::Base
  def default_url(*args)
    ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
  end
end

如果您在模型中使用资产管道

如果你想查看文件是否存在你需要做

@user.photo.file.nil?

因为这将检查实际存在的文件。