В моей базе данных у меня есть модель, у которой есть поле, которое должно быть выбрано из одного из списка опций. В качестве примера рассмотрим модель, в которой необходимо хранить измерения, например, 5 футов, или 13 см, или 12,24 м3. Очевидный способ добиться этого - иметь десятичное поле, а затем другое поле для хранения единицы измерения.
Итак, как лучше всего хранить единицы измерения? Я использовал несколько подходов в прошлом:
1) Сохранение различных опций в другой таблице БД (и связанной модели) и связывание этих двух параметров со стандартным внешним ключом (и обычно стремящимся загрузить связанную модель). Это кажется излишним, поскольку вы заставляете БД выполнять объединение для каждого запроса.
2) Хранение опций в виде постоянного хэша, загруженного в один из инициализаторов, где ключ в хэше хранится в поле единиц измерения. Таким образом, вы эффективно выполняете объединение в Ruby (что может увеличивать или не увеличивать производительность), но вы теряете возможность запроса со стороны «единицы измерения». Это не будет проблемой при условии, что вам вряд ли понадобятся запросы типа «найди мне все измерения с единицами см».
Ничто из этого не кажется мне особенно элегантным ... Кто-нибудь может предложить что-то лучше?