Ruby on rails显示评级系统的星图

时间:2015-01-11 11:23:07

标签: ruby-on-rails ruby image rating rating-system

我有一个简单的rails应用程序,用户可以在其中留下产品的评级,并在我得到它时,以便在索引页面上显示平均评级,因此对于动物农场的书,如果有评级: 1,3,5指数将显示该书的3。但我想做的是用星号替换显示的数字,所以不是显示“星级评分:3”,而是显示“星级评分:”然后显示三星图像。有这么简单快捷的方法吗?

/views/products/index.html.erb:

<div id="star-rating">
        <% if not product.no_of_stars.blank? %>
          Star rating: <%= product.no_of_stars %>
        <% else %>
          <%= link_to 'Please add a Review',{ controller: 'reviews', action: 'new', id: product.id } %>
        <% end %>
      </div>

/models/product.rb:

def no_of_stars
    self.reviews.average('no_of_stars')
end

我还需要知道保存星形图像的位置以及如何选择要显示的星形,到目前为止我已将它放在/ app / assets / images目录中。我需要在没有java的情况下完全使用ruby。

有人可以请求帮助,我对红宝石相当新,所以可以做一个完整的故障怎么办?谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

您可以使用帮助程序执行此操作。如果您需要不同模型中的星星,您可以在文件app/helpers/application_helper.rb中添加帮助器(我使用'*'作为星形的表示):

module ApplicationHelper

  def render_stars(value)
    output = ''
    if (1..5).include?(value.to_i)
      value.to_i.times { output += '*'}
    end
    output
  end

end

您的重构视图将如下所示:

<div id="star-rating">
  <% if product.no_of_stars.blank? %>
    <%= link_to 'Please add a Review',{ controller: 'reviews', action: 'new', id: product.id } %>
  <% else %>
    Star rating: <%= render_stars(product.no_of_stars) %>
  <% end %>
</div>