2015-01-11 2 views
1

사용자가 제품 등급을 남겨 놓을 수있는 분량의 레일 애플리케이션이 있는데 평균 등급이 색인 페이지에 표시되도록하기 때문에 도서 동물 농장은 평가가 있다면 : 1, 3, 5 색인은 그 책 3 표시됩니다. 하지만 내가하고 싶은 일은 별표와 함께 표시된 숫자를 대체하는 것입니다. 따라서 "별표 평점 : 3"을 표시하는 대신 "별표 평점 : 3"별표 이미지가 표시됩니다. 이 작업을 수행하는 빠르고 간단한 방법이 있습니까?등급 시스템에 루비 레일에 별 이미지가 표시됩니다.

/views/products/index.html.erb :

<div id="star-rating"> 
     <% if not product.no_of_stars.blank? %> 
      Star rating: <%= product.no_of_stars %> 
     <% else %> 
      <%= link_to 'Please add a Review',{ controller: 'reviews', action: 'new', id: product.id } %> 
     <% end %> 
     </div> 

/models/product.rb : 나는 또한 스타의 이미지를 저장할 위치를 알 필요가

def no_of_stars 
    self.reviews.average('no_of_stars') 
end 

및 표시 할 별을 선택하는 방법, 지금까지는/app/assets/images 디렉토리에 있습니다. 나는 자바없이 루비에서 순전히 이것을 할 필요가있다.

누가 도와 주시겠습니까? 나는 루비에 대해 상당히 새로운 지식을 가지고 있습니다. 그렇기 때문에 할 일에 대한 완전한 분석이 가능합니까? 읽어 주셔서 감사합니다.

답변

1

도우미와 함께 할 수 있습니다.

module ApplicationHelper 

    def render_stars(value) 
    output = '' 
    if (1..5).include?(value.to_i) 
     value.to_i.times { output += '*'} 
    end 
    output 
    end 

end 

귀하의 리팩토링보기는 다음과 같이 보일 것이다 :

경우 당신은 당신이 (스타의 표현으로 '*'내가 사용하는) 파일 app/helpers/application_helper.rb에 도우미를 추가 할 수있는 다양한 모델 별 필요
<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> 
+0

난 그냥 해봤이 당신의 코드의 적응 다음과 같은 오류 얻을없이 그대로 같이/week_15_test 공사중/1// my_bookshop_test2/응용 프로그램을/사이트 : 제품 번호 지수 에서 NoMethodError C보기를 /views/products/index.html.erb 어디에서 # 35 전화 :'번호 <인 BigDecimal : 6dbed90' 정의 방법 0.2E1 '배', 9 (45)> 추출 소스 (라인 # 35 정도) : \t <% product.no_of_stars.blank 경우? %> link_toars (product.no_of_stars) %> <% = link_to '리뷰를 추가하십시오', 컨트롤러 : '리뷰', 작업 : '신제품', id : product.id} %> <% else %>별 등급 : %> <% end %> –

+0

@ benjs.1'BigDecimal'에서'times'를 호출 할 수 없다고 불평하고 있습니다. – jcm

+0

.to_i 메서드를 추가했습니다. 이제는 BigDecimal에서도 작동합니다. – wintermeyer