我有一个简单的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。
有人可以请求帮助,我对红宝石相当新,所以可以做一个完整的故障怎么办?谢谢你的阅读。
答案 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>