Ruby 在 Rails 上显示半星表示小数评分,例如4.5

Ruby on Rails display half a star for a decimal rating, e.g. 4.5

我可以看到 5 个星号表示产品评分为 5,4 个星号表示产品评分为 4,等等。但是我想做的是用我自己制作的星号图像替换星号在我的 assets/images/ 目录中,如果评级为 4.5,则显示半星。有没有办法做到这一点?下面是我在 application_helper.rb 中的当前代码和 index.html.erb 中的视图。

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

index.html.erb:

<div id="star-rating">
    <% if not product.no_of_stars.blank? %>
        <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> 

你可以试试这样的:

module ApplicationHelper

  def render_stars(value)
    i_value = value.floor
    f_value = value - i_value

    output = '*' * i_value
    output << image_tag('half_star.jpg') if f_value > 0

    output
  end

end

您可能必须在视图中使用 .html_safe

但是,您的 html.erb 片段看起来不对。它不会正确呈现,如果您不关闭文件下方某处的第一个 if ,它会引发错误。你想达到什么目的?

假设您要使用 star.gif 作为星图,使用 half-star.gif 作为 1/2 星图:

module ApplicationHelper
  def render_stars(value)
    output = ''
    if (1..5).include?(value.floor)
      value.floor.times { output += image_tag('star.gif')}
    end
    if value == (value.floor + 0.5) && value.to_i != 5
      output += image_tag('half-star.gif')
    end
    output.html_safe
  end
end