2011-04-05 80 views
0

我有场地记录,其中每个人都有评论,每次审查都堪称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。*时出现错误。

我是编程的超级新手,我正在努力解决这个问题。

感谢您的任何帮助,非常感谢!

+0

不要使用风格标签,使用类后缀rating- [1-5]。 – 2011-04-12 00:13:37

回答

2

你想做的事:

<%= (@venue.reviews.average(:rating) || 0) *20 %> 

这样,如果你没有收视率,则默认为0,从而不引发错误,但也提供了所需的将宽度设置为0的结果。如果您有评论,则会缩短该场地的平均评分。

这里的问题是.average()在没有任何评论时返回nil,因此它正在执行(nil * 20)......这显然不起作用。

+0

非常感谢大家的回答! – Dave 2011-04-05 23:25:02

0

将其更改为<%= @venue.reviews.average(:rating)*20 rescue 0 %>。这样,您将有0 width样式

1

你可能很麻烦,但在最简单的解决方案是这样的:

<% unless @venue.reviews.empty? %> 
    <div class="star_rating_container"> 
    <div class="star_rating" style="width: <%= @venue.reviews.average(:rating)*20 %>px;"> 
    </div> 
    </div> 
<% end %>