Search code examples
ruby-on-railsrubyimageratingrating-system

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


I am able to view 5 asterisks for a rating of 5 for a product, and 4 asterisks for a rating of 4 etc. But what I would like to do is replace the asterisks with an image of a star that I have in my assets/images/ directory, and if a rating is of 4.5 then display half a star. Is there a way of doing this? Below is my current code in application_helper.rb and the view in 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> 

Solution

  • Let's assume you want to use star.gif as a star image and half-star.gif as the 1/2 star image:

    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