2013-08-31 34 views
6

我正在使用ActiveAdmin作爲其管理後端的項目。ActiveAdmin自動加載完整關聯表

我有兩個模型,一個書模型has_many產品。當我嘗試訪問ActiveAdmin中的產品索引視圖時,它似乎試圖將全書表加載到內存中(我的數據庫中有大約150萬本書)。 CPU使用率高達100%,內存使用率達到千兆字節。

打開MySQL的記錄證實,這是當這種觀點被稱爲發生了什麼:

17 Query  SELECT `books`.* FROM `books` 

至於我可以告訴任何試圖加載之前的產品出現這種情況。

爲了弄清楚這個問題,我扯下了模型到他們的基本框架:

class Product < ActiveRecord::Base 
    belongs_to :book 
end 

class Book < ActiveRecord::Base 
    has_many :products 
end 

我也是AA定義減少到其最基本的形式:

ActiveAdmin.register Product do 
end 

這是正常的ActiveAdmin ?它看起來不像可取的行爲。

回答

26

對於處理這個相同問題的任何人,我最終將其追蹤到ActiveAdmin中自動生成的邊欄。這包括一個搜索字段,其中包含所有關聯記錄的選擇框。

如果你有一張關聯表,上面有超過百萬條記錄,比如我AA會很樂意嘗試將整個表插入到選擇框中。

答案是包含在AA定義一些自定義過濾器產品,像這樣:(除非你自己指定它)

ActiveAdmin.register Product do 
    filter :title 
end 

這樣的協會將不包括

+1

剛把同樣的問題,成千上萬的記錄中的10秒被拉上一個愚蠢的下拉-_-有點煩人,我不得不手動重新輸入其餘的過濾器,它顯然是所有的習慣或沒有習慣,但無論 - 擊敗後端! –