根据性别设置默认图片 - Carrierwave & Device
Set Default Image According To Gender - Carrierwave & Device
我使用 carrierwave 上传图片,但由于我无法在 image_uploader.rb 中访问 devise gem 的变量 'current_user',所以我无法根据性别设置默认图片图片 url 为 nil(创建或更新后),有解决办法吗?
uploaders/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
如果 image_uploader.rb
是一个模块,使用回调(例如 after_create
)在您的 User.rb
模型中调用它,传递用户对象并根据用户的性别设置图像。
像这样:
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
为简洁起见,显然省略了一些代码。
解决方法是在app/assets/images
下添加两张照片"male/female.png"
然后在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
使用此方法
我使用 carrierwave 上传图片,但由于我无法在 image_uploader.rb 中访问 devise gem 的变量 'current_user',所以我无法根据性别设置默认图片图片 url 为 nil(创建或更新后),有解决办法吗?
uploaders/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
如果 image_uploader.rb
是一个模块,使用回调(例如 after_create
)在您的 User.rb
模型中调用它,传递用户对象并根据用户的性别设置图像。
像这样:
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
为简洁起见,显然省略了一些代码。
解决方法是在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