我有一个应用程序,用户可以使用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/">
答案 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中,唯一的错误是false
和nil
。这意味着空字符串""
实际上将返回true。
答案 1 :(得分:0)
你需要看看user.image.nil? user.image.empty?和user.image.blank?取决于您正在使用的内容并将其应用于其他条件。你需要具体找出你想要的东西或者其他东西不会给你你想要的东西。我会首先尝试清空,检查是否为零或是空字符串。
答案 2 :(得分:0)
创建新的rails应用程序时,rails会将其徽标存储在PROJECT_PATH / app / assets / images文件夹中。你能检查一下这张图片是否存在吗?