2013-08-31 3 views
6

관리 백엔드에 ActiveAdmin을 사용하는 프로젝트에서 작업하고 있습니다.ActiveAdmin 자동으로 전체 연결 테이블로드

저는 두 가지 모델, has_many Products가있는 책 모델이 있습니다. 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와 같은 백만 개가 넘는 레코드가있는 관련 테이블이있는 경우 행복하게 전체 테이블을 선택 상자에 삽입하려고 시도합니다. (. 당신이 직접 지정하지 않는 한)

ActiveAdmin.register Product do 
    filter :title 
end 

협회가 포함되지 않습니다 그런 식으로

+1

그냥했다 :

대답은 그래서 같은 제품에 대한 AA 정의의 일부 사용자 지정 필터를 포함하는 것이 었습니다 같은 문제, 10 억 개의 레코드가 어리석은 드롭 다운을 위해 끌어 올려지고 있습니다. -_- 필자는 필터의 나머지 부분을 수동으로 다시 입력해야한다는 것을 귀찮게합니다. 분명히 모든 사용자 정의 또는 사용자 지정이 아니지만 무엇이든간에 - 충돌은 백엔드! –

관련 문제