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

一曲冷凌霜 提交于 2019-12-17 20:33:55

问题


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> 

回答1:


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



回答2:


You can try with something like this:

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

You might have to use .html_safe in the view.

Your html.erb snippet looks wrong, however. It won't render correctly, and it will raise an error if you don't close the first if somewhere down the file. What do you want to achieve?



来源:https://stackoverflow.com/questions/27888515/ruby-on-rails-display-half-a-star-for-a-decimal-rating-e-g-4-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!