If I was doing this I would just have a table stage and a :belongs_to
for each object that can have stages. Then you can query any table on
its stage or set of stages in a single query. If you are wanting all
objects of any type in a stage then things get very messy as you
indicated because you are navigating from the stage using a
polymorphic association. In general though that seems overkill.
Generally I want things grouped or filtered by stage not all objects
regardless of type in a stage.