如果记录存在,我怎么才能显示某个div?

时间:2011-04-05 22:54:41

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有会场记录,其中每个都有评论,每个评论可以评为1到5,我正在使用以下方式显示平均评论评分:

<%= @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);
    }

然而问题是我得到一个“当你没想到它时你有一个nil对象!你可能已经预料到一个Array的实例。当我试图查看一个时,在评估nil。*时出错了。”没有评论的场地。

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

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

3 个答案:

答案 0 :(得分:2)

你想这样做:

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

这样,如果你没有评级,它将默认为0,因此不会抛出错误,但也提供将宽度设置为0的所需结果。如果你有评论,它将短路到平均评级那个场地。

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

答案 1 :(得分: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 %>

答案 2 :(得分:0)

将其更改为<%= @venue.reviews.average(:rating)*20 rescue 0 %>。这样你就有了0宽度样式