2013-02-25 156 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並讓它自動返回默認網址,如果沒有頭像。

換句話說:像你的建議那樣做就是擊敗目標。

我的五美分是,你提供的圖像網址是錯誤的,一旦你有正確的網址,我上面的代碼就足夠了。