Tôi đã mất một lúc nhưng tôi đã tìm ra câu trả lời. Tôi quyết định đăng nó, hy vọng nó sẽ giúp ích cho những người khác.
Mongoid thực hiện một cái gì đó được gọi là "kế thừa bảng đơn". Ngay sau khi bạn lấy một lớp con từ một lớp cha, lớp con sẽ được lưu trữ trong tập hợp cha thêm một thuộc tính "type". Sử dụng "store_in" cho mongodb biết rõ ràng bộ sưu tập nào sẽ lưu trữ tài liệu. Việc xác định store_in trong lớp con làm cho mongoid lưu trữ mọi thứ (bao gồm cả cha) trong bộ sưu tập đã cho. Tôi đoán việc sử dụng một nhiệm vụ store_in dành riêng cho mỗi đứa trẻ sẽ làm rối tung lên. Tuy nhiên, kết quả là các tài liệu được lưu trữ ngẫu nhiên trong bất kỳ bộ sưu tập nào đã cho.
Điều này có thể được giải quyết trong Ruby bằng cách sử dụng một mô-đun làm mixin cho chức năng chung. Điều này được mô tả khá tốt trong tài liệu này .
NHƯNG tôi quyết định không làm điều này sau cùng! Lý do tại sao tôi muốn điều này là để giữ cho bộ sưu tập của tôi nhỏ, hy vọng sẽ có được hiệu suất tốt hơn. Sau khi nói chuyện với một số chuyên gia (10gen), tôi nghĩ cách tiếp cận tốt hơn là sử dụng tập hợp đối tượng cha đơn cho tất cả các phần tử con. Sẽ không có tác động đến hiệu suất của mongodb nhưng giải pháp trở nên linh hoạt hơn nhiều. Trên thực tế, điều này giúp sử dụng tốt hơn nhiều thiết kế schemaless trong mongodb.
Vì vậy, mã sẽ giống như sau:
class BaseClass
include Mongoid::Document
... shared functionality
end
class ChildClass1 < BaseClass
...individual functionality...
end
class ChildClass2 < BaseClass
...individual functionality...
end