ruby on rails -如何在记录存在的情况下只显示某个div



我有每个有评论的场所记录,每个评论可以被评为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时发生错误。*"当我试图查看一个没有评论的场地时出现错误。

我对编程非常陌生,正在努力解决这个问题。

谢谢你的帮助,非常感谢!

你想做的是:

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

这样,如果您没有评级,它将默认为0,因此不会抛出错误,而且还提供将宽度设置为0的预期结果。如果你有评论,它会缩短到该场所的平均评分。

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

你可能会很棘手,但最直接的解决方案是:

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

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

相关内容

  • 没有找到相关文章

最新更新