使用Rails 6.这是我写的只是为了显示星星数的部分。显然,我对自己的代码感到厌恶。您将如何重构?
# application_helper.rb
module ApplicationHelper
def show_star_rating(rating)
zero_star_icon_name = "star"
full_star_icon_name = "star_fill"
half_star_icon_name = "star_lefthalf_fill"
total_stars = []
round_by_half = (rating * 2).round / 2.0
(round_by_half.to_i).times { total_stars << full_star_icon_name }
if round_by_half - round_by_half.to_i == 0.5
total_stars << half_star_icon_name
end
if total_stars.size != 5
(5 - total_stars.size).times { total_stars << zero_star_icon_name }
end
total_stars
end
end
# show.html.erb
<% show_star_rating(agent_review.rating).each do |star| %>
<i class="f7-icons"><%= star %></i>
<% end %>
答案 0 :(得分:2)
您可以使用Array.new
,传入要显示的最大星星数,并将所有星星默认为空。然后,您可以fill
输入所需的满星数量。然后,最后,由于Numeric
的{{3}}返回了0
或1
所需的半星数量,您又通过了一次,{{1} }中所需的半星数量:
fill
答案 1 :(得分:1)
我实现show_star_rating
的方式:
def show_star_rating(rating)
zero_star_icon_name = "star"
full_star_icon_name = "star_fill"
half_star_icon_name = "star_lefthalf_fill"
rating_round_point5 = (rating * 2).round / 2.0
(1..5).map do |i|
next(full_star_icon_name) if i <= rating_round_point5
next(half_star_icon_name) if rating_round_point5 + 0.5 == i
zero_star_icon_name
end
end