2014-01-24 29 views
1

我有模型場館和venue_managers。我需要顯示所有的場地,但是他們是否有場館經理下令。ActiveRecord最高性能的方式來檢查是否有關聯的對象

我可以在場地模型上設置一個類似「計數器緩存」的布爾值,所以我不必查詢相關的venue_managers。我想知道是否有人知道一個簡單的方法來檢查一個關聯的對象的存在,而不必發出一個SQL查詢?

編輯:

這是一個HABTM關係,因此鐵路的counter_cache顯然不會在這裏工作。

回答

0

將計數器緩存'venue_managers_count'添加到'場地'將是最高效的方法。

您可以創建在場地範圍:

scope :with_managers, -> { where('venue_managers_count > 0') } 

和查詢這樣的場地:

venue_with_managers = Venue.with_managers 
+0

不幸的是這是一個HABTM關係。顯然鐵路的本地counter_caching不能完成。 (對不起,我應該提到的是,將編輯我的問題) – rfish26535

+0

將其更改爲has_many,並使用中間模型中的計數器緩存。計數器比刪除子記錄的布爾更加高效和安全,因爲不需要查詢其他子記錄來測試布爾值是否應該設置爲false - 您只需遞減計數器。 –

相關問題