如何使用带有图标作为参数的rails helper方法?

时间:2017-01-31 19:27:39

标签: html ruby-on-rails

我想创建一个给我星级的方法。星星将来自fontawesome的starstar-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-starfa-star-half)获取值。将ruby方法与fontawesome的图标结合使用以达到预期的星级评分的最佳做法是什么?

我知道有几个宝石可以做到这一点,但我试图从头开始,以帮助我更多地了解rails。

1 个答案:

答案 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