我在视图中有以下逻辑,根据个人资料是否存在,选择显示哪个头像图片
<% if @profile %>
<%= image_tag(@profile.avatar_url(:thumb)) %>
<% else %>
<%= image_tag(default_image_url) %>
<% end %>
辅助方法
def default_image_url
hash = Digest::MD5.hexdigest(current_user.email)
"https://secure.gravatar.com/avatar/#{hash}?s=100&d=mm"
end
当有人没有创建个人资料时,这种方法很好,但是当他们这样做并且仍然想要使用他们的gravatar时,这个逻辑会失败,因为我的if条件需要是if
<% if @profile.avatar? %>
<%= image_tag(@profile.avatar_url(:thumb)) %>
<% else %>
<%= image_tag(default_image_url) %>
<% end %>
在创建没有用户上传图像的配置文件时,根本没有图像显示..
我如何涵盖所有场景
任何帮助表示赞赏
修改
我正在尝试
<% unless @profile || @profile.avatar %>
由于
答案 0 :(得分:5)
从@ ArieShaw的回答开始进行一些重构:
辅助
def profile_image_url
@profile.try(:avatar?) ? @profile.avatar_url(:thumb) : default_image_url
end
查看
<%= image_tag profile_image_url %>
答案 1 :(得分:4)
您可以使用Object#try
:
<% if @profile.try(:avatar?) %>
<%= image_tag(@profile.avatar_url(:thumb)) %>
<% else %>
<%= image_tag(default_image_url) %>
<% end %>