2017-03-08 40 views
1

我想弄清楚爲什麼這是產生N + 1查詢。具體來說,我想獲得upvotes的數量,並認爲通過使用它會。我的目標是通過upvotes的數量來排列結果,但是當我還想報告每個條目的upvotes數時,爲什麼它會再次查詢數據庫以獲得upvotes?謝謝:)爲什麼我無法使用連接從activerecord關係中進行查詢?

self .joins(:upvotes) .group("#{self.table_name}.id") .order("count(upvotes.id) DESC") .includes(:creator, :categories)

+0

請包括更多詳細信息:您如何訪問您的視圖中的計數? – Leito

+0

如果將'.to_sql'添加到該查詢的末尾,會發生什麼情況? (通常你可以用它來發現它想要做什麼以及它與你期望的不同之處) –

回答

0

如果這將是一個公共計數,Rails有一些所謂的反緩存,將存儲在父模型的數量,以方便查詢。

我不知道你的類名,所以我叫X.

Upvotebelongs_to :x, counter_cache: true

然後你只需要在X


一個upvotes_count領域被存儲在X ,您只需查詢X,按_upvotes_count_排序並使用該字段來顯示它。

相關問題