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)
这样就不会包含关联(除非你自己指定).
| 归档时间: |
|
| 查看次数: |
1530 次 |
| 最近记录: |