2012-11-06 25 views
0

一個樣式有很多評論在Active Record提供同樣查詢中加入總數和總數

比方說,我做的:

Style.select('styles.id'). 
    joins(:reviews). 
    select('reviews.style_id, count(reviews.id) AS review_count') 

...但我也想知道評語總數!是否有可能提取該信息。我嘗試將count(*)作爲total_reviews,但這仍然會返回每個樣式的評論計數。

回答

1

如果您認爲在SQL中,您正在構建大量行(以及該批次的一個子集),並且在每一行中您將爲該行添加一個計數。

另一方面,你想要一個總數。哪些檢索到的記錄應具有該總數以及哪個列/屬性?

這並不是說你不能在rails中這樣做,而是你不能在SQL本身中這樣做。 結果集是完全不同的,所以你需要兩個查詢,所以你需要兩個ActiveRecord調用。

一種不同的方式來處理這(再次,你需要兩個separaate查詢,但他們更簡單)是使用@style.reviews一個counter_cache:

# add a 'reviews_count' integer column to the 'styles' table and use it as 
# a counter cache as follows 
class Review < AR::Base 
    belongs_to :style, :counter_cache => true 
end 

現在你有計數,而不需要的加盟,總數可以用一個簡單的總和來獲得。

附錄:要使用ocounter緩存,查詢styles表一如既往(不包括或連接的),並調用

@style.reviews.size 

,每當你想獲得的評論數。這不會進行另一個查詢,而是使用@style實例本身上的高速緩存計數器。

+0

你讓我失去了最後一段。總數是多少? –

+0

你說「...但我也想知道評論總數!」。現在您已經有了一個包含特定評論數量的列,爲了獲得所選樣式的評論總數,您只需對相應的計數器進行求和。 – rewritten

+0

謝謝。多麼令人失望!我需要在單個查詢中訪問這兩者,以便計算執行ajax調用的jquery數據表的貝葉斯平均值。 – Abram