Apologies if the question is a little imprecise, but I'll describe my problem below.
I'm setting up some models in a Rails project, and one thing I've noticed I'm running into more than a few times is dealing with attributes that meet the following criteria:
- They can be set to one of a small, predefined set of values
- Those values need to have both a name and an identifier (whether a numeric id, code, whatever)
- The values would only ever change as the result of a good deal of code change.
For example, one of my models should have a status field that can be set to one of: Defining, Executed, or Completed. I need to show those specific words within the interface, but I don't want to store the strings in the DB in case I need to change them in the future (or internationalize, or whatever.)
The obvious option is to define models for each of these models, but that seems to present a good deal of overhead in maintaining the models, ensuring that I write migrations between environments, etc. for each one of these, which seems like a lot of overhead.
The other option is to store it as an integer, and whip up an "enumeration" type class that stores the translation of those values - this would probably work fine, but I'm concerned that I'll lose associations and other handy stuff I get from ActiveRecord models.
Any advice on the best way to handle this situation?