2013-08-31 7 views
6

私は管理バックエンドとしてActiveAdminを使用するプロジェクトに取り組んでいます。ActiveAdminが自動的にフルアソシエーションテーブルをロードする

私は2つのモデル、has_many製品を持つブックモデルを持っています。 ActiveAdminの製品インデックスビューにアクセスしようとすると、ブックテーブル全体をメモリに読み込もうとしているようです(私のデータベースには約150万冊の書籍があります)。 CPU使用率は100%に上がり、メモリ使用量はギガバイトにまで上がります。

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

私の知る限り、これは製品をロードしようとする前に発生言うことができるように:mysqlのログをオンにする

がこのビューが呼び出されたときに何が起こるかであることを確認します。私は自分の裸の骨までのモデルを剥奪、この問題を把握するために

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のように100万を超えるレコードを持つ関連テーブルをお持ちの場合、テーブル全体を選択ボックスに挿入しようとします。

答えはそうのような製品のためのAA定義で、いくつかのカスタムフィルタを含めるようにした:(。あなたはそれを自分で指定しない限り)会合は含まれませんその方法

ActiveAdmin.register Product do 
    filter :title 
end 

+1

だけでした同じ問題、何千ものレコードが1つの愚かなドロップダウンのために引き上げられている-----私は手作業でフィルタの残りの部分を入力しなければならないという煩わしさを感じています。バックエンド! –

関連する問題