Ruby if else语法

时间:2012-03-27 03:43:29

标签: ruby ruby-on-rails-3

我有一个应用程序,用户可以使用Facebook注册,在这种情况下我可以使用Facebook图像,或者他们可以使用常规身份验证进行注册,在这种情况下,他们使用CarrierWave gem上传照片。

由于某种冲突,我不得不在数据库中创建一个列(:image)以将URL存储到Facebook图像,然后在另一列(:dimage)中存储该列以存储如果他们使用非Facebook注册进行注册,则会显示图片的网址。

因此,当显示用户时,我正在检查是否有:image,如果没有,则显示另一个:dimage

但是,我不想要求他们上传图片,在这种情况下,我想要显示一个非图像(此处由rails.png表示)。但是,Rails.png没有显示(只是一个损坏的图像路径),所以我假设我的if else语法存在某种错误,因为image_tag("rails.png")直接来自api

 <% if user.image %>
 <%= image_tag user.image %>
 <% elsif user.dimage %>
 <%= image_tag user.dimage_url(:thumb).to_s %>
 <% else %>
 <%= image_tag("rails.png") %>
 <% end %>

rails.png上生成的html

<img alt="Assets" src="/assets/">

3 个答案:

答案 0 :(得分:4)

使用present?方法检查属性是否为空:

<% if user.image.present? %>
  <%= image_tag user.image %>
<% elsif user.dimage.present? %>
  <%= image_tag user.dimage_url(:thumb).to_s %>
<% else %>
  <%= image_tag("rails.png") %>
<% end %>

你会为自己避免一两个头痛,因为在Ruby中,唯一的错误是falsenil。这意味着空字符串""实际上将返回true。

答案 1 :(得分:0)

你需要看看user.image.nil? user.image.empty?和user.image.blank?取决于您正在使用的内容并将其应用于其他条件。你需要具体找出你想要的东西或者其他东西不会给你你想要的东西。我会首先尝试清空,检查是否为零或是空字符串。

答案 2 :(得分:0)

创建新的rails应用程序时,rails会将其徽标存储在PROJECT_PATH / app / assets / images文件夹中。你能检查一下这张图片是否存在吗?