2015-02-18 1 views
0

Я использовал Ruby on Rails и Raty.js для создания рейтинговой системы для своих контактов. Вы можете видеть средний рейтинг на отдельных страницах Показать для каждого булавки. Я хотел бы включить это в свой индексный файл. В настоящее время рейтинг, который отображается для всех контактов в индексе, представляет собой средний рейтинг первого вывода.Показать среднюю оценку штыря/столбца в индексе Ruby on Rails и Raty.js

Примечание: Я использую Haml для индексного файла, но если бы вы могли предоставить ответ в базовом html, это будет нормально.

index.html.haml:

.panel-footer 
    .btn-group.pull-left 
    %div{class: "srating", dscore: @avg_review } 

:javascript 
    $('.srating').raty({ 
     path: '/assets/', 
     readOnly: true, 
     score: function() { 
      return $(this).attr('dscore'); 
     } 
    }); 

pins_controller.rb:

class PinsController < ApplicationController 
    before_action :find_pin, only: [:show, :edit, :update, :destroy, :upvote, :un_upvote] 
    before_action :authenticate_user!, except: [:index, :show] 

    def index 
     @pins = Pin.all.order("created_at DESC").paginate(page: params[:page], per_page: 7) 
     for singlepin in @pins 
      @stars_reviews = StarsReview.where(pin_id: singlepin.id) 

      if @stars_reviews.blank? 
       @avg_review = 0 
      else 
       @avg_review = @stars_reviews.average(:rating).round(2) 
      end 
     end 
    end 
+0

Что вы еще не ответили? Вы не указали, с чем у вас возникла проблема. – ptd

+0

Я хочу показать средний рейтинг номинального знака для каждого вывода в индексе – Shafquat

ответ

1

Это фактически показывает средний рейтинг последнего штифтом.

for singlepin in @pins 
    @stars_reviews = StarsReview.where(pin_id: singlepin.id) 

    if @stars_reviews.blank? 
    @avg_review = 0 
    else 
    @avg_review = @stars_reviews.average(:rating).round(2) 
    end 
end 

Каждый цикл здесь устанавливает только одну переменную в новое значение.

Так что либо добавляйте средний атрибут оценки на вывод, либо обновляйте его каждый раз, когда кто-то его оценивает.

Или сделать переменный массив:

@avg_reviews = [] 
for singlepin in @pins 
    @stars_reviews = StarsReview.where(pin_id: singlepin.id) 

    if @stars_reviews.blank? 
    @avg_reviews << 0 
    else 
    @avg_reviews << @stars_reviews.average(:rating).round(2) 
    end 
end 

Затем выход, как вы петля над штифтами

<% @pins.each_with_index do |pin, i| %> 
    %div{class: "srating", dscore: @avg_reviews[i] } 
<% end %> 

Или вы могли бы позволить атрибут на штифте, который вы установили

class Pin 
    attr_accessor :avg_review 
end 

for singlepin in @pins 
    @stars_reviews = StarsReview.where(pin_id: singlepin.id) 

    if @stars_reviews.blank? 
    singlepin.avg_review = 0 
    else 
    singlepin.avg_review = @stars_reviews.average(:rating).round(2) 
    end 
end 

Затем обращайтесь к нему на вид

<% @pins.each do |pin| %> 
    %div{class: "srating", dscore: pin.avg_review } 
<% end %> 
+0

благодаря массиву! :) – Shafquat

 Смежные вопросы

  • Нет связанных вопросов^_^