if语句的逻辑

时间:2014-06-19 09:02:16

标签: ruby-on-rails ruby if-statement ruby-on-rails-4

我在视图中有以下逻辑,根据个人资料是否存在,选择显示哪个头像图片

 <% 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 %>

由于

2 个答案:

答案 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 %>