Использование Rails 3.1.3 и Ruby 1.9.3.
Я хочу предоставить пользователю список возможных форматов даты / времени.Выбор пользователя будет сохранен в таблице Users.Значения даты / времени затем форматируются с использованием функции I18n.localize.У меня на самом деле есть 10 форматов;вот в качестве примера первые два:
config / locales / datetime.en.yml
en:
time:
format_labels:
mdyslash12: mm/dd/yyyy - hh:mm am (12-hour)
mdyslash24: mm/dd/yyyy - hh:mm (24-hour)
formats:
mdyslash12: ! '%m/%d/%Y %I:%M%p'
mdyslash24: ! '%m/%d/%Y %H:%M'
Мой вопрос: где хранить список возможныхформаты даты / времени.Я определил три варианта.
1.Перечислите параметры как ПОСТОЯННОЕ в модели:
app / models / user.rb
DATETIME_FORMATS = %w[mdyslash12 mdyslash24]
validates :datetime_format, :presence => true,
:inclusion => { :in => DATETIME_FORMATS }
2.Создайте константу приложения и проверьте ее:
config / initializers / constants.rb
Rails.configuration.datetime_formats = "mdyslash12 mdyslash24"
app / models / user.rb
validates :datetime_format, :presence => true,
:inclusion => { :in => Rails.application.config.datetime_formats.split(" ") }
3.Проверка напрямую по файлу локали:
app / models / user.rb
validates :datetime_format, :presence => true,
:inclusion => { :in => (I18n.t 'time.format_labels').stringify_keys.keys }
Этот параметр использует новую для меня функцию: I18n.t 'time.format_labels'
возвращаетхеш ВСЕХ ключей и значений из этой ветви файла локали.Ключи хеширования являются символами, поэтому для получения массива строк я вызываю stringify_keys
, чтобы преобразовать символы в строки, а затем keys
, чтобы получить только ключи (без значений).
Опция # 3СУХОЕ, что мне не нужно перечислять возможные значения в двух местах.Но не совсем корректно полагаться на файл локали для дискретного списка возможных форматов даты / времени.
Что бы вы порекомендовали?Один из этих вариантов?Что-то еще?