【问题标题】:How can I only display a certain div if a record exists?如果存在记录,如何仅显示某个 div?
【发布时间】:2011-04-05 22:54:41
【问题描述】:

我有场地记录,其中每个都有评论,每条评论都可以被评为 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);
    }

但是问题是,当我尝试查看没有评论的场地。

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

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

【问题讨论】:

  • 不要使用样式标签,使用后缀为 rating-[1-5] 的类。

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


【解决方案1】:

你想做的:

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

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

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

【讨论】:

    【解决方案2】:

    您可能会变得棘手,但最直接的解决方案是:

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

    【讨论】:

      【解决方案3】:

      将其更改为&lt;%= @venue.reviews.average(:rating)*20 rescue 0 %&gt;。这样你就会有 0 宽度样式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-25
        • 2022-12-10
        • 1970-01-01
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多