Lookup tables

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.