我使用carrierwave进行图片上传,但由于我无法访问image_uploader.rb到devise gem的var'current_user',因此当图片网址为nil时(创建或更新后),我无法根据性别设置默认图片),有工作吗?
上传/ image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base
def default_url
if (current_user.gender == "Male")
ActionController::Base.helpers.asset_path("fallback/" + [version_name, "male.PNG"].compact.join('_'))
else
ActionController::Base.helpers.asset_path("fallback/" + [version_name, "female.PNG"].compact.join('_'))
end
end
end
答案 0 :(得分:2)
如果image_uploader.rb
是模块,请使用回调(例如User.rb
)在您的after_create
模型中调用它,传递用户对象并根据用户的性别设置图像。
这样的事情:
class User < ActiveRecord::Base
after_create :set_default_url!
def set_default_url!
url = ImageUploader.default_url(gender)
update!(url: url)
end
end
然后,在你的模块中:
class ImageUploader < CarrierWave::Uploader::Base
def self.default_url(gender)
ActionController::Base.helpers.asset_path("fallback/" + [version_name, "#{gender.downcase}.PNG"].compact.join('_'))
end
end
为简洁起见,显然省略了一些代码。
答案 1 :(得分:0)
解决方法是在app/assets/images
然后在helpers / application_helper中创建此方法
def default_img(user)
if user.avatar_url.nil?
if (user.gender == "Male")
"male.PNG"
else
"female.PNG"
end
else
user.avatar_url
end
end
然后对每个img_tag