Never thought about using a separate module to keep them grouped but it is a really good technique.
I topically use this in a way in which the constants end up being almost private.
I either wrap the value checks in small predicate methods:
color == COLORS_RED
Or if I need them with active record I create scopes like the ones in the post.
Even in tests I try to avoid using them for setup and if I have factory_bot at hand I create traits for the different values instead.
This way you end up with code which is a bit more decoupled from this specific implementation detail and when your constant is not enough and you need to build an object instead you'll save a lot of grepping and sedding😅
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.