如果'用户'没有头像,我正在尝试使用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
,则可以使用。
答案 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。
换句话说:像你的提议那样做就有点失败了。
我的五美分是您提供的图片网址错误,一旦您拥有了正确的网址,我上面的代码就足够了。