2013-08-31 36 views
6

Tôi đang làm việc trên một dự án sử dụng ActiveAdmin cho chương trình phụ trợ quản trị của nó.ActiveAdmin tự động tải bảng kết hợp đầy đủ

Tôi có hai mô hình, một mô hình Sách có nhiều Sản phẩm. Khi tôi cố gắng truy cập vào chế độ xem chỉ mục sản phẩm trong ActiveAdmin, có vẻ như cố tải bảng đầy đủ vào bộ nhớ (có khoảng 1,5 triệu cuốn sách trong cơ sở dữ liệu của tôi). Mức sử dụng CPU lên đến 100% và mức sử dụng bộ nhớ tăng lên gigabyte.

Bật mysql khai thác gỗ khẳng định rằng đây là những gì sẽ xảy ra khi quan điểm này được gọi là:

17 Query  SELECT `books`.* FROM `books` 

Theo như tôi có thể nói điều này xảy ra trước khi bất kỳ nỗ lực để nạp các sản phẩm.

Để tìm ra vấn đề này, tôi lột các mô hình xuống xương trần của họ:

class Product < ActiveRecord::Base 
    belongs_to :book 
end 

class Book < ActiveRecord::Base 
    has_many :products 
end 

Tôi cũng làm giảm độ nét AA mẫu cơ bản nhất của nó:

ActiveAdmin.register Product do 
end 

Đây có phải là bình thường đối với ActiveAdmin ? Nó không có vẻ như hành vi mong muốn.

Trả lời

26

Đối với bất kỳ ai xử lý vấn đề tương tự này, cuối cùng tôi đã truy tìm nó vào thanh bên được tạo tự động trong ActiveAdmin. Điều này bao gồm một trường tìm kiếm bao gồm một hộp chọn cho tất cả các bản ghi liên quan.

Nếu bạn có một bảng được liên kết với hơn một triệu bản ghi như tôi làm AA sẽ vui vẻ cố gắng chèn toàn bộ bảng vào hộp chọn.

Câu trả lời là để bao gồm một số bộ lọc tùy chỉnh trong định nghĩa AA cho các sản phẩm như vậy: (. Trừ khi bạn xác định nó cho mình)

ActiveAdmin.register Product do 
    filter :title 
end 

Bằng cách đó hiệp hội sẽ không được đưa

+1

Chỉ cần có cùng một vấn đề, 10s của hàng ngàn hồ sơ được kéo lên cho một thả xuống ngu ngốc -_- Loại gây phiền nhiễu mà tôi phải hướng dẫn lại nhập phần còn lại của các bộ lọc, nó dường như tất cả các tùy chỉnh hoặc không có tùy chỉnh, nhưng bất cứ điều gì - nhịp đập đâm phụ trợ! –

Các vấn đề liên quan