Как я могу отображать только определенный div, если запись существует? - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть записи места, где у каждого есть отзывы, каждый отзыв может быть оценен от 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. *», когда я пытаюсь просмотреть место, где нет отзывов.

Я новичок в программировании и пытаюсь решить эту проблему.

Спасибо за любую помощь, она очень ценится!

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

Вы хотите сделать:

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

Таким образом, если у вас нет оценок, по умолчанию будет установлено значение 0, что не приведет к ошибке, но также обеспечит желаемые результаты установки ширины в 0.Если у вас есть отзывы, это приведет к короткому замыканию к среднему рейтингу для этого места.

Проблема здесь заключалась в том, что .average () возвращал ноль, когда не было никаких отзывов, поэтому он делал (ноль* 20) ... что явно не работает.

1 голос
/ 06 апреля 2011

Вы можете получить хитрое, но самое простое решение - это:

<% unless @venue.reviews.empty? %>
  <div class="star_rating_container">
  <div class="star_rating" style="width: <%= @venue.reviews.average(:rating)*20 %>px;">
    </div>
  </div>
<% end %>
0 голосов
/ 06 апреля 2011

Измените его на <%= @venue.reviews.average(:rating)*20 rescue 0 %>. Таким образом, у вас будет 0 стиля ширины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...