[英]if-else in HAML (ruby on rails)
我正在尝试使用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"
...
请注意,如果我在img
标签中使用了@user.avatar.icon.url
,它将起作用。
问题是您只是生成一个字符串,而不评估代码。 当您这样做时:
"@{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
逻辑。
我认为您所追求的是:
.user_avatar
-img_path = defined?(@user.avatar.url) ? @user.avatar.url : @user.avatar.default_url
%img{:src => img_path}
首先,请检查默认图片的网址是否正确,如果图片位于app/assets/images
文件夹中,则default_icon.png
应该足以作为网址。
其次,考虑使用辅助程序,而不是手动编写%img
标记:
= image_tag @user.avatar.url
第三,尽管我现在无法测试,但是我很确定在回形针中定义default_url
的目的是能够只调用@user.avatar.url
并让它自动返回默认URL(如果没有)头像。
换句话说:像您的建议那样做会破坏目标。
我的五分钱是您提供的图片网址错误,并且一旦您输入了正确的网址,上面的代码就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.