I don’t like things when I’m not good at them. If you’re like me, you might like enums better if you knew how to use them properly.
As Emmanuel said, setting status by hash solves your first issue.
Your second is solved by adding :pending_customer to your list of options. You could also just pass in a nil value. I really don’t see the point, though. How much interaction do you need on that attribute while the object is floating in memory anyways? And if you really do need it, you could just check for the presence of the attribute.
Your third objection to enums is unlikely, but potentially a valid reason not to use them. This is only going to happen with very large applications, where you’re usually going to want the performance boost from storing integers, not strings, in your massive database. Depending on the rails/non-rails ratio, you might be better off configuring the non-rails apps.
There’s a reason the rails community has embraced enums. You get the performance of an integer, and the flexibility of a string/symbol.
You should give enums another try.