如果映像不存在,则显示默认用户映像(ruby on rails)



我想在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

中有一个名为default.jpg的照片

最新更新