1

ここにコードの匂いがあります:

f.series(:name=>'Average review', :data=> [
            Integer(@review.style.reviews.average(:answer01).to_f*20),
            Integer(@review.style.reviews.average(:answer02).to_f*20),
            Integer(@review.style.reviews.average(:answer03).to_f*20),
            Integer(@review.style.reviews.average(:answer04).to_f*20),
            Integer(@review.style.reviews.average(:answer05).to_f*20),
            Integer(@review.style.reviews.average(:answer06).to_f*20),
            Integer(@review.style.reviews.average(:answer07).to_f*20),
            Integer(@review.style.reviews.average(:answer08).to_f*20),
            Integer(@review.style.reviews.average(:answer09).to_f*20),
            Integer(@review.style.reviews.average(:answer10).to_f*20),
            ]

単一の DB クエリでこれを処理するための最良の方法について誰かアドバイスできますか?

4

1 に答える 1

0

わかりました、これはそれほど簡潔ではありませんが、

@s_avgs=Style.joins(:reviews).select(
     'avg(answer01) AS avg1,
      avg(answer02) AS avg2,
      avg(answer03) AS avg3,
      avg(answer04) AS avg4,
      avg(answer05) AS avg5,
      avg(answer06) AS avg6,
      avg(answer07) AS avg7,
      avg(answer08) AS avg8,
      avg(answer09) AS avg9,
      avg(answer10) AS avg10'
      ).where(:id=>@review.style.id).first

...

f.series(:name=>'Average review for this style', :data=> [
        Integer(@s_avgs.avg1.to_f*20),
        Integer(@s_avgs.avg2.to_f*20),
        Integer(@s_avgs.avg3.to_f*20),
        Integer(@s_avgs.avg4.to_f*20),
        Integer(@s_avgs.avg5.to_f*20),
        Integer(@s_avgs.avg6.to_f*20),
        Integer(@s_avgs.avg7.to_f*20),
        Integer(@s_avgs.avg8.to_f*20),
        Integer(@s_avgs.avg9.to_f*20),
        Integer(@s_avgs.avg10.to_f*20),
        ] ) 

他の誰かがより良いオプションを持っている場合は、私に知らせてください!

于 2013-04-21T03:31:15.957 に答える