HAML中的if-else(轨道上的红宝石)

时间:2013-02-25 17:24:30

标签: ruby-on-rails paperclip

如果'用户'没有头像,我正在尝试使用if-else渲染一些默认图像(作为用户的头像)。 (这是为了避免令人沮丧的missing.png图像)。但到目前为止它还没有发挥作用。

这是我的观点(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"
...

请注意,如果我在@user.avatar.icon.url标记中使用了img,则可以使用。

3 个答案:

答案 0 :(得分: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

换句话说,如果用户有定义的头像网址,那么使用它, else 使用默认网址。

另外,请考虑将此内容放入用户的方法中,例如User#avatar_url,它可以自行执行此if/else逻辑。

答案 1 :(得分:0)

我认为你所追求的是:

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

答案 2 :(得分:0)

首先,请检查您的默认图片的网址是否正确,如果图片位于app/assets/images文件夹中,default_icon.png应该足以作为网址。

其次,不要手动编写%img标记,而应考虑使用帮助程序:

= image_tag @user.avatar.url

第三,虽然我现在无法测试,但我很确定在回形针中定义default_url的目的是能够只调用@user.avatar.url并让它返回默认值如果没有头像,则自动url。

换句话说:像你的提议那样做就有点失败了。

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