Основываясь на ваш вопрос, это звучит, как это больше вариантов конфигурации, что конкретный пользователь будет выбрать из этого, может быть довольно статичным, а не динамический характер в том, что параметры могут изменяться с течением времени. Например, я сомневаюсь, что вы добавите другие другие weight_units
, кроме :kg
и :lb
, но возможно, что я неправильно понимаю ваш вопрос.
Если я читаю это правильно, я бы порекомендовал (и использовал) yml-файл в каталоге config/
для таких значений. Файл yml доступен для широкого доступа, и все ваши «настройки» могут находиться в одном файле. Затем они могут быть загружены в ваши модели в виде констант и сериализованы как @SDp. Тем не менее, я склонен ошибаться на стороне осторожности, особенно если подумать, что, возможно, эти «общие ценности» могут когда-нибудь понадобиться, поэтому я предпочел бы, чтобы каждый из них был как столбец на столе, а не один сериализованный стоимость. Накладные расходы не намного больше, и вы получите много дополнительных встроенных преимуществ от Rails, имеющих их отдельные столбцы.
Это, я лично использовал hstore с Postgres с большим успехом, делая то, что вы описываете. Тем не менее, причина, по которой я решил использовать hstore над отдельными столбцами, заключалась в том, что я хранили несколько разных демографических данных, в которых все демографические данные могли меняться со временем (например, некоторые ключи могли быть добавлены, и что более важно, некоторые ключи могли быть удалены.) Это звучит, как и в вашем случае, маловероятно, что вы будете удалять ключи, поскольку это основные черты, но опять же, я могу ошибаться.
TL; Я считаю, что, если у вас нет веской причины (например, регулярное добавление и/или удаление ключей/настроек), это должны быть отдельные столбцы в таблице базы данных. Если вы сильно чувствуете, что они должны храниться в базе данных, сериализованы, и вы используете Postgres, проверьте hstore.
Привет SDP, спасибо за Ваш ответ! Где бы вы сохранили предопределенные значения? Вероятно, было бы разумно иметь их где-то в одном месте, где их можно легко модифицировать в одном месте! Не могли бы вы поместить их в какой-то отдельный класс или просто свалить их в константах внутри пользователя? Ура! – jfornoff