0

如果“用户”没有头像,我正在尝试使用 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.urlimg标签中使用,它将起作用。

4

3 回答 3

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,则使用它,否则使用默认 URL。

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

于 2013-02-25T17:26:48.570 回答
0

我想你追求的是:

.user_avatar
 -img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url
 %img{:src => img_path}
于 2013-02-25T17:45:10.227 回答
0

首先,请检查您的默认图片的 url 是否正确,如果图片在app/assets/images文件夹中,default_icon.png则作为 url 就足够了。

其次,不要手动编写%img标签,而是考虑使用帮助器:

= image_tag @user.avatar.url

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

换句话说:像你的提议那样做有点违背了目的。

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

于 2013-02-25T19:45:53.223 回答