Is it possible to get real polymorphism in Mongoid?
Example:
class Company
include Mongoid::Document
has_many :workers, as: :workable
end
class Worker
include Mongoid::Document
field :hours
belongs_to :workable, polymorphic: true
end
class Manager < Worker
field :order
has_many :contributors
end
class Contributor < Worker
field :task
end
The problem with this is it goes through the worker superclass to try to figure out the referenced documents type. Which means that while HOURS can be manipulated, the fields that belong to the subclasses cannot like CONTRIBUTORS, ORDER, TASK cannot. Is there a way to make this truely polymorphic?
And to elaborate when I say truely polymorphic, I mean is it possible to have the objects as workers and determine which type they are at a later time so their specific fields can be set. So I have the ability to loop over all workers but also the ability to set the worker’s specific fields such as order and task when the Contributor or Manager is constructed.
Also if polymorphism is doable, what would a controller and view look like that fills out a Manager and Contributor’s fields in the company?
Thanks
I had a similar problem before.. You’ll need to google for “Mongoid Inheritance” and “Mongoid Self referential relationship” — see also:
Mongoid 3 (current)
Mongoid 2
Mongoid also has the concept of “Inheritance” .. with which you can model extending the behavior of classes , like Manager < Worker , and Contributer < Worker in your example — all three Classes are stored in the “Worker” collection.
You might also want to look at the “ancestry” Gem.
try: