我正在研究一个使用ActiveAdmin进行管理后端的项目。
我有两个模型,一个具有多个产品的Book模型。当我尝试访问ActiveAdmin中的产品索引 View 时,似乎试图将完整的books表加载到内存中(我的数据库中大约有150万本书)。 CPU使用率上升到100%,内存使用率飙升至千兆字节。
打开mysql日志记录,确认这是在调用该 View 时发生的情况:
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是否正常?这似乎不是理想的行为。
最佳答案
对于处理相同问题的任何人,我最终都将其追溯到ActiveAdmin中自动生成的侧边栏。这包括一个搜索字段,其中包括一个用于所有关联记录的选择框。
如果您的关联表像我一样有超过一百万条记录,AA会很乐意尝试将整个表插入到选择框中。
答案是在产品的AA定义中包括一些自定义过滤器,如下所示:
ActiveAdmin.register Product do
filter :title
end
这样,将不包括该关联(除非您自己指定它。)
关于ruby-on-rails - ActiveAdmin自动加载完整的关联表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18552496/