2011-11-07 2 views
1

私はhas_manyのレビューとレビューと 'has_many' ReviewValuesのソリューションモデルを持っています。各ReviewValueは、タグ名を含むタグにもリンクされています。 私は、特定のソリューションに付随するavailage scores(タグでグループ化されたすべてのタグ用)を選択しようとしています。関連する要素のActiveRecordクエリ

基本的にレビューモデルは、ソリューションおよびReviewValues間の結合表である(と名前が含まれているタグテーブルもあります)

私はこれまで持っていることはこれです:

@total = self.reviews.review_values.average(:score) 

問題がされ1つの特定のレビューに対してのみreview_valuesを呼び出すことができ、すべてのレビューでは呼び出せません。私は(タグ名により)各reviewvalueの平均を必要とするので、私を助けていないself.reviews.first.review_values...ような何かを

を持っていると思いますので、これはreview_valuesテーブルは次のようになります。

Table review_values 
=================== 
id, tag_id, review_id, score, created_at, updated_at 
------------------- 
id    int(11) PK 
tag_id   int(11) 
review_id  int(11) 
score   int(11) 
created_at  datetime 
updated_at  datetime 

そして、タグテーブル:

Table tags 
========== 
id, name 
---------- 
id    int(11) PK 
name    varchar(255) 

答えて

1

使用してみましたか? 例:

class Solution 
    has_many :reviews 
    has_many :review_values, :through => :reviews 
end 

@total = my_solution.review_values.average(:score) 
+0

これは動作するようです。私は各tag_idの平均をどのように得ることができますか? – networkprofile

+0

良い質問 - 「ダブルスルー」のようですか?つまり、review_values have_many tags?」と表示された場合、もう少し複雑になる可能性があります...私はこれまでにダブルスルーを試みたことはないと思いますが、タグ:through:review_values ") –

+1

私は' averages = self.review_values.joins(:tag).group(:tag).average(:score) 'の助けを借りてそれを行うことができました! – networkprofile

関連する問題