Это не сообщение в блоге, это вопрос!
Говоря о типах, я имею в виду, что у нас есть значение типа и описание типа.У нас могут быть разные типы (пол, размер, цвет и т. Д.) И набор значений для каждого типа.У нас есть 2 варианта: хранить типы в базе данных или в приложении.
Для меня, чтобы хранить всю таблицу для хранения значений типов для каждого типа, излишне.Другой способ - хранить типы в одной таблице с полями: имя типа, значение типа, описание типа.Сохранить тип в db полезно, если вы хотите изменить его значения из приложения.Но в основном, когда я добавляю новый тип, я меняю поведение приложения.
Для меня лучшим выбором является сохранение типов в приложении.У меня есть файл конфигурации YML, подобный этому (на самом деле он является частью SettingsLogic файла настроек):
types:
gender: "male female"
Таким образом, я могу проверить ввод данных формы:
validates_inclusion_of :gender, :in => Settings.types.gender.split(/\s/)
Поскольку мое приложение многоязычное, я храню описания в файлах локализации:
ru:
types:
gender:
male: "Мужской"
female: "Женский"
Чтобы подготовить набор вариантов для выбора, я использую этот вспомогательный метод:
def genders
genders = []
Settings.types.gender.split(/\s/).each do |gender|
genders << [t("types.gender.#{gender}"), gender]
end
genders
end
Недостаток этого подхода заключается в том, что я должен хранить в значениях типа db long мужской и женский вместо достаточных m и f .
Итак, я думаю о хэше:
def genders
genders = []
gender_types = { :m => "male", :f => "female" }
gender_types.each do |key, value|
genders << [t("types.gender.#{value}"), key]
end
genders
end
Но пока у меня нет ответа, где хранить хэш, как я делаю это со строками в файле конфигурации.Как я уже упоминал, этот хэш должен быть доступен не только из вспомогательного метода, но и из проверок.
Итак, вопрос достаточно широк: как вы храните типы?Какой подход лучше или лучше?