2011-04-05 61 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 %> 
相關問題