2012-03-27 59 views
0

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

由于某种冲突,我不得不在数据库中创建一列(:image)以将url存储到Facebook图像,然后在另一列(:dimage)中存储图像的url(如果它们已经签名使用非Facebook的注册。

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

但是,我不想要求他们上传图片,在这种情况下,我想要显示anon图片(此处由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 %> 

的生成html on the rails.png

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

什么是生成的HTML? – 2012-03-27 03:45:09

+0

查看html的更新信息 – Leahcim 2012-03-27 04:06:03

+0

你的逻辑错误,你应该在User上有一个简单的'image_thumb_url'方法,返回适当的'src'属性。 – 2012-03-27 04:19:23

回答

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。

0

你需要看看user.image.nil? user.image.empty?和user.image.blank?取决于你使用的是什么,并将其应用于其余的条件。你需要明确找出你想要的东西,或者如果别的东西不会给你想要的东西。我会首先尝试空,它会检查是否有零或空字符串。

0

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

+0

图像在那里。查看生成的html的更新OP。 – Leahcim 2012-03-27 04:05:50

+0

我也尝试过使用这个<%= image_tag(“http://dl.dropbox.com/u/10328969/smiley.jpg”)%>代替资产/图片中的rails.png,但没有成功 – Leahcim 2012-03-27 04:08:49