我想在ruby中编写一个条件,如果没有用户图像则显示默认图像,如果有则显示当前图像。
这是我的index.html.slim页面:
@product.reviews.each do |r|
a href="#"
= image_tag r.user.image_url :thumbnail`
我建议您在帮助器或模型中添加相应的代码,以保持代码的整洁。
辅助方法:
def user_avatar user
if user.image.present?
image_tag user.image_url :thumbnail
else
# Assuming you have a default.jpg in your assets folder
image_tag 'default.jpg'
end
end
视图页面:
@product.reviews.each do |r|
a href="#"
= user_avatar r.user
另外,从代码中我感觉你正在使用像回形针或载波这样的库。
如果在回形针中是这样,您可以通过将此代码放置在模型中来设置默认图像。
:default_url => "/assets/:style/missing_avatar.jpg"
如果你使用载波,把这个方法放在你的上传文件中。
def default_url
"/images/fallback/default.png"
end
假设您正在使用回形针或其他东西将图像保存到数据库中,您可以通过
检查图像是否存在if r.user.image.present?
= image_tag r.user.image_url :thumbnail
else
= image_tag 'your default image path'
end
你应该检查你的图像gem,看看这是否有效,因为我不知道你有什么样的设置
我设法通过在用于显示用户的视图中使用erb来处理这个问题。
这种方法的一个好处是,您不需要为多个用户多次保存默认照片。你可以在assets/images中保留一个,然后依赖它。
我正在使用Active Storage和以下宝石来处理照片的上传和调整大小:
gem 'image_processing', '1.9.3'
gem 'mini_magick', '4.9.5'
gem 'active_storage_validations', '0.8.9'
,并在必要的视图中编写以下代码:
<% if user.image.attached? %>
<%= image_tag user.image.variant(resize_to_limit: [200, 200]) %>
<% else %>
<%= image_tag("default.jpg", alt: "A stern frog", width: "200") %>
<% end %>
确保在assets/images