2012-07-26 50 views
1

我當時無法追查時,我開始在我的開發日誌中看到SELECT COUNT(*)呼叫,但它正在發生,似乎沒有成爲一個它的原因。我想知道這是否正常和/或爲什麼發生。我不認爲這是一個主要問題,但爲什麼如果我不需要額外的調用數據庫的話。神祕SELECT COUNT(*)出現在我的控制器的has_many關係

在我的控制器我有

def some_action 
    @activities = user.activities 
end 

User類,我有它has_many :activities

,當我把這個動作,我的日誌輸出

User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
(0.3ms) SELECT COUNT(*) FROM "activities" WHERE "activities"."user_id" = 1 
Activity Load (0.3ms) SELECT "activities".* FROM "activities" WHERE "activities"."user_id" = 1 

所有我可以告訴你肯定的是,它並沒有使用這樣做SELECT COUNT(*)呼叫,據我所知,沒有任何試圖獲得該計數。

我用Rails 3.2.6和PostgreSQL 9

回答

1

我發現了數查詢的原因是由於Rails的延遲加載,我用我的數據,其中的順序。

雖然我遍歷所有的@activities,我在視圖模板中使用實例變量做的第一件事是檢查是否有任何要通過。如果沒有,我會顯示與用戶不同的內容。

@activities.empty?正在執行計數和比較來0比所有的記錄加載到一個數組,然後檢查更有效。我可以選擇將我的動作更改爲

@activities = user.activities.all 

它阻止COUNT調用並在構建視圖之前加載所有記錄。