Also if storage size is an issue then you can add the limit: option to the migration, which let's you select integer sizes:
So in your example something like:
t.integer :status, null: false, limit: 1
On MySQL this will become a tinyint (1 byte) and on Postgres a smallint (2 bytes). Of course this doesn't solve the problem of enum values not being meaningful outside the app context.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.