ActiveAdmin自动加载完整关联表

我正在开发一个使用ActiveAdmin作为其管理后端的项目。

我有两个型号,一个有很多产品的书籍型号。 当我尝试在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定义缩减为最基本的forms:

 ActiveAdmin.register Product do end 

这对ActiveAdmin来说是正常的吗? 这似乎不是理想的行为。

对于处理同一问题的任何人,我最终将其追溯到ActiveAdmin中自动生成的侧边栏。 这包括一个搜索字段,其中包含所有相关记录的选择框。

如果你有一个超过一百万条记录的关联表,就像我一样,AA会很乐意尝试将整个表插入到选择框中。

答案是在AA定义中包含一些自定义filter,如下所示:

 ActiveAdmin.register Product do filter :title end 

这样就不会包含关联(除非你自己指定)。