12

管理バックエンドに ActiveAdmin を使用するプロジェクトに取り組んでいます。

2 つのモデルがあります。1 つは、has_many Products の Book モデルです。ActiveAdmin で製品のインデックス ビューにアクセスしようとすると、books テーブル全体をメモリにロードしようとしているようです (私のデータベースには約 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 では正常ですか? 望ましい動作とは思えません。

4

2 に答える 2

36

この同じ問題を扱っている人のために、私は最終的に ActiveAdmin で自動的に生成されたサイドバーにたどり着きました。これには、関連するすべてのレコードの選択ボックスを含む検索フィールドが含まれます。

私のように 100 万件を超えるレコードが関連付けられたテーブルがある場合、AA は喜んでテーブル全体を選択ボックスに挿入しようとします。

答えは、次のような製品の AA 定義にいくつかのカスタム フィルターを含めることでした。

ActiveAdmin.register Product do
  filter :title
end

そうすれば、関連付けは含まれません (自分で指定しない限り)。

于 2013-09-05T22:31:24.000 に答える