我想创建一个给我星级的方法。星星将来自fontawesome的star和star-half。我创建了下面的方法,它接受评级(浮点数0.0到5.0,增量为0.5)。半星将是<i class="fa fa-star-half" aria-hidden="true"></i>
,星星将是<i class="fa fa-star" aria-hidden="true"></i>
。如果评级为3.5,则预计会返回(3×star
)+(1×half-star
)。
def star_rating(rating, star, half_star)
star = star
half_star = half_star
if ((rating % 1).round == 1) #ends with 0.5
result = (rating - 0.5).round * star + half_star
else
result = rating * star
end
return result
end
我之前从未做过这样的事情。我最初的想法是将star_rating()
放在Ruby帮助器中(在这种情况下为posts_helper.rb
)。
在帖子的视图index.html.erb
中,我做了<%= star_rating(post.rating, <i class="fa fa-star" aria-hidden="true"></i>, <i class="fa fa-star-half" aria-hidden="true"></i>) %>
,但它引发了错误。
简而言之,我有一个ruby方法,它从模型(post.rating
)和两个图标(fa-star
和fa-star-half
)获取值。将ruby方法与fontawesome的图标结合使用以达到预期的星级评分的最佳做法是什么?
我知道有几个宝石可以做到这一点,但我试图从头开始,以帮助我更多地了解rails。
答案 0 :(得分:1)
我真的不确定这是否正确显示评级帮助者。 但这应该有效:
创建部分文件
# _rating.html.erb
<%= fa_icon "#{icon_name}" %>
添加到您所需的视图文件
# view.html.erb
<%= show_raiting(3.3) %>
并向helper添加方法,其中path/to/your
是_rating.html.erb模板的路径
#***_helper.rb
def show_raiting(rating)
rating = rating.to_f
if rating.present?
output_stars = ''
rating.floor.times do
output_stars += render partial: 'path/to/your/rating', locals: { icon_name: 'star' }
end
output_stars += render partial: 'path/to/your/rating', locals: { icon_name: 'star-half' } unless rating % 1 == 0
output_stars.html_safe
end
end