Butuh beberapa saat tetapi saya menemukan jawabannya. Saya memutuskan untuk mempostingnya, berharap ini akan membantu orang lain.
Mongoid mengimplementasikan sesuatu yang disebut "warisan tabel tunggal". Segera setelah Anda menurunkan kelas anak dari kelas induk, anak tersebut akan disimpan dalam koleksi induk dengan menambahkan atribut "type". Menggunakan "store_in" memberi tahu mongodb secara eksplisit koleksi mana yang akan menyimpan dokumen. Mendefinisikan store_in di kelas anak membuat mongoid menyimpan semuanya (termasuk induknya) dalam koleksi yang diberikan. Saya kira menggunakan tugas store_in khusus untuk setiap anak mengacaukan mongoid. Namun, hasilnya adalah dokumen disimpan secara acak di salah satu koleksi yang diberikan.
Ini dapat diselesaikan di Ruby menggunakan modul sebagai mixin untuk fungsionalitas umum. Ini dijelaskan dengan cukup baik di dokumen ini .
TAPI saya memutuskan untuk tidak melakukan ini! Alasan mengapa saya menginginkan ini adalah untuk menjaga koleksi saya tetap kecil, berharap untuk mendapatkan kinerja yang lebih baik. Setelah berbicara dengan beberapa ahli (10gen), saya pikir pendekatan yang lebih baik adalah menggunakan koleksi objek induk tunggal untuk semua elemen anak. Seharusnya tidak ada dampak pada kinerja mongodb tetapi solusinya menjadi jauh lebih fleksibel. Sebenarnya ini membuat penggunaan desain tanpa skema di mongodb jauh lebih baik.
Jadi kodenya akan terlihat seperti ini lagi:
class BaseClass
include Mongoid::Document
... shared functionality
end
class ChildClass1 < BaseClass
...individual functionality...
end
class ChildClass2 < BaseClass
...individual functionality...
end