Widzę, że obrazek inspirujący
Odnośnie schematu bazy danych dla STI to jest on na mojej stronie, przy czym dostosowując do Railsów, trzeba by pozmieniać nazwy:
heavenly_bodies(id, name, radius, temperature, weight, orbit_radius, luminosity, tupe, planet_id, star_id)
Rozwiązanie z parametrami ogólnymi jest raczej niewłaściwe ze względów wydajnościowych - wydobycie jednego obiektu będzie generowało n+1 zapytań. No i takie rozwiązanie nie jest automatycznie obsługiwane przez Railsy. Zdecydowanie lepiej jest zastosować konwencję STI i nie przysparzać sobie dodatkowej roboty.
Jeśli chodzi o kod poszczególnych klas:
class HeavenlyBody < AR::Base
end
class Star < HeavenlyBody
has_many :planets
end
class Planet < HeavenlyBody
has_many :moons
belongs_to :star
end
class Moon < HeavenlyBody
belongs_to :planet
end
To tak na szybko - nie sprawdzałem tego, ale chyba powinno działać