2013-02-25 112 views
0

如果'用户'没有头像,我正尝试使用if-else来呈现一些默认图像(是用户的头像)。 (这是为了避免压抑missing.png图片)。但目前还没有效果。if-else in HAML(ruby on rails)

这是我的看法(view.html.haml文件):

... 
.user_avatar 
-img_path = defined?(@user.avatar.url) ? "@{user.avatar.default_url}" : "@user.avatar.url" 
%img{:src => img_path} 
... 

这里是我的模型:

... 
attr_accessible :name, :avatar 

has_attached_file :avatar :default_url => "assets/images/default_icon.png" 
... 

需要注意的是,如果我在img标签使用@user.avatar.icon.url,它会工作。

回答

0

我想你以后就是:

.user_avatar 
-img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url 
%img{:src => img_path} 
1

问题是你只是生成一个字符串,而不是评估代码。当你这样做的时候:

"@{user.avatar.default_url}" 

你正在得到正好那个字符串。你可能想要做的是:

@user.avatar.default_url 

不作为字符串。这样它实际上被评估。 "@user.avatar.url"也是一样的。

编辑

变化:

-img_path = defined?(@user.avatar.url) ? @user.avatar.default_url : @user.avatar.url 

要:

-img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url 

换句话说,如果用户有一个定义头像的URL,然后用它,其他使用默认网址。

此外,请考虑将此投入到用户的方法,如User#avatar_url,它可以执行此逻辑本身if/else

+0

我不确定。它仍然不起作用。 (我仍然看到'missing.png'图像,而不是我的默认图标) – 2013-02-25 17:33:23

+0

我认为你也有它倒退。 – MrDanA 2013-02-25 17:36:13

+0

对不起,应该进一步回复:请参阅我的编辑。 – MrDanA 2013-02-25 17:51:16

0

首先,请确认网址给你默认的图像是正确的,如果图像是在app/assets/images文件夹,default_icon.png应该足以作为网址。

其次,代替手工书写%img标签,可以考虑使用一个帮手:

= image_tag @user.avatar.url 

第三,虽然我不能现在我敢肯定,测试它是定义在default_url点回形针是能够只打电话@user.avatar.url并让它自动返回默认网址,如果没有头像。

换句话说:像你的建议那样做就是击败目标。

我的五美分是,你提供的图像网址是错误的,一旦你有正确的网址,我上面的代码就足够了。