2011-11-07 39 views
1

我有一個解決方案模型,與has_many評論,並評論'has_many'ReviewValues。每個ReviewValue還鏈接到包含標籤名稱的標籤。 我正在嘗試選擇avarage scores(適用於所有按標籤分組的標籤),並附帶特定解決方案。相關元素的ActiveRecord查詢

基本上評測模型解決方案和ReviewValues之間的連接表(也有包含姓名的標籤表)

我到目前爲止是這樣的:

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

的問題是我只能在一個特定的評論中調用review_values,而不是全部評論。所以我不得不這樣做self.reviews.first.review_values...這並不能幫助我,因爲我需要平均每個reviewvalue(通過標籤名稱)

這是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 has_many tags?「如果是這樣 - 它可能會更復雜一些......我認爲我以前沒有嘗試過雙向通過,但它可能只是值得一試(例如」Solution has_many標籤:通過:review_values「) –

+1

我能夠通過連接'averages = self.review_values.joins(:tag).group(:tag).average(:score)'''感謝您的幫助! – networkprofile