使用父模型属性的 CarrierWave 上传器默认图像

CarrierWave uploader default image using parent model attributes

我在我的 rails 项目中为用户头像使用 CarrierWave 上传器,我目前为没有上传头像的用户提供默认 URL(从 4 个选项中随机选择)图片。正如 CarrierWave README 所建议的那样,我将其实现为:

class UserAvatarUploader < ImageUploader
  def default_url(*args)
    ActionController::Base.helpers.asset_path("avatars/default_avatar_#{rand(4).to_s}.png")
  end
end

由于是随机函数,这里的问题是每次重新加载页面时用户的头像都会改变。理想情况下,我想从用户的用户名中派生一个数字,以便 his/her 默认头像保持一致。我该怎么做?提前致谢!

好的,我解决了。基本上我被困住了,因为我找不到从 default_url 方法中获取用户信息的方法。后来我发现变量 model 是可用的,它指的是用户。这是我的最终代码:

class UserAvatarUploader < ImageUploader
  def default_url(*args)
    number = model.id % 4
    ActionController::Base.helpers.asset_path("avatars/default_avatar_#{number}.png")
  end
end