2013-08-31 13 views
6

Pracuję nad projektem, który używa ActiveAdmin do zaplecza administracyjnego.ActiveAdmin automatycznie ładuje pełną tabelę skojarzeń

Mam dwa modele, model Book, który ma wiele produktów. Kiedy próbuję uzyskać dostęp do widoku indeksu produktów w ActiveAdmin, wydaje się, że próbuję załadować pełną tabelę książek do pamięci (w mojej bazie danych znajduje się około 1,5 miliona książek). Wykorzystanie procesora wzrasta do 100%, a zużycie pamięci rośnie do gigabajtów.

Włączanie rejestrowania mysql potwierdza, że ​​to co się dzieje, gdy pogląd ten nazywa się:

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

O ile mogę powiedzieć, to dzieje się przed każdą próbą załadowania produktów.

Aby dowiedzieć się ten problem rozebrałem modeli do swoich gołych kości:

class Product < ActiveRecord::Base 
    belongs_to :book 
end 

class Book < ActiveRecord::Base 
    has_many :products 
end 

ja również zmniejszona definicję AA do swojej najbardziej podstawowej formie:

ActiveAdmin.register Product do 
end 

Czy to normalne dla ActiveAdmin ? Nie wydaje się pożądanym zachowaniem.

Odpowiedz

26

Dla każdego, kto zajmuje się tym samym problemem, w końcu prześledziłem go do automatycznie wygenerowanego paska bocznego w ActiveAdmin. Obejmuje to pole wyszukiwania, które zawiera pole wyboru dla wszystkich powiązanych rekordów.

Jeśli masz powiązaną tabelę z ponad milionem rekordów takich jak ja, z przyjemnością spróbuję wstawić całą tabelę do pola wyboru.

Odpowiedzią było to kilka niestandardowych filtrów w definicji AA dla produktów tak: (., Chyba że podasz go samodzielnie)

ActiveAdmin.register Product do 
    filter :title 
end 

ten sposób stowarzyszenie nie zostaną włączone

+1

prostu miał ten sam problem, 10s tysięcy rekordów jest zatrzymanych dla jednego głupiego dropdown -_- Trochę irytujące, że muszę ręcznie wprowadzić ponownie pozostałe filtry, to najwyraźniej wszystkie niestandardowe lub niestandardowe, ale cokolwiek - bije awarie backend! –

Powiązane problemy