ActiveAdmin自动加载完整关联表

Pet*_*tee 9 ruby-on-rails ruby-on-rails-3 activeadmin

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

我有两个型号,一个具有__产品的书籍型号.当我尝试在ActiveAdmin中访问产品索引视图时,它似乎尝试将完整的书籍表加载到内存中(我的数据库中有大约150万本书).CPU使用率高达100%,内存使用率达到千兆字节.

打开mysql日志记录确认这是调用此视图时发生的情况:

17 Query     SELECT `books`.* FROM `books`
Run Code Online (Sandbox Code Playgroud)

据我所知,在任何加载产品的尝试之前都会发生这种情况.

为了解决这个问题,我将模型剥离为他们的骨头:

class Product < ActiveRecord::Base
  belongs_to :book
end

class Book < ActiveRecord::Base
  has_many :products
end
Run Code Online (Sandbox Code Playgroud)

我还将AA定义缩减为最基本的形式:

ActiveAdmin.register Product do
end
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*tee 32

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

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

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

ActiveAdmin.register Product do
  filter :title
end
Run Code Online (Sandbox Code Playgroud)

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