如果存在记录,我怎么才能显示某个div?
问题描述:
我有场地记录,其中每个人都有评论,每次审查都堪称1到5,我用显示的平均评价等级:如果存在记录,我怎么才能显示某个div?
<%= @venue.reviews.average(:rating) %>
我想表示评分明星图像,而不是一个号码。
我有这个安装在我看来,持有星星:
<div class="star_rating_container">
<div class="star_rating" style="width: <%= @venue.reviews.average(:rating)*20 %>px;">
</div>
</div>
这个CSS:
.star_rating_container {
width: 100px;
height: 20px;
background-image: url(/images/dim_star.png);
}
.star_rating {
height: 20px;
background-image: url(/images/lit_star.png);
}
然而,问题是,我得到一个“你有一个零对象,当你没想到它!你可能期望有一个Array的实例,当我试图查看没有评论的场所时,在评估nil。*时出现错误。
我是编程的超级新手,我正在努力解决这个问题。
感谢您的任何帮助,非常感谢!
答
你想做的事:
<%= (@venue.reviews.average(:rating) || 0) *20 %>
这样,如果你没有收视率,则默认为0,从而不引发错误,但也提供了所需的将宽度设置为0的结果。如果您有评论,则会缩短该场地的平均评分。
这里的问题是.average()在没有任何评论时返回nil,因此它正在执行(nil * 20)......这显然不起作用。
+0
非常感谢大家的回答! – Dave 2011-04-05 23:25:02
答
将其更改为<%= @venue.reviews.average(:rating)*20 rescue 0 %>
。这样,您将有0 width样式
答
你可能很麻烦,但在最简单的解决方案是这样的:
<% unless @venue.reviews.empty? %>
<div class="star_rating_container">
<div class="star_rating" style="width: <%= @venue.reviews.average(:rating)*20 %>px;">
</div>
</div>
<% end %>
不要使用风格标签,使用类后缀rating- [1-5]。 – 2011-04-12 00:13:37