繁体   English   中英

HAML中的if-else(红宝石)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM