Rails: как сделать i18n в выпадающем меню в simple_form

У меня есть simple_form с выпадающим меню с набором опций. Я хочу, чтобы параметры сохранялись как целые числа, но текст отображался в раскрывающемся списке в виде строки в зависимости от локали. Следующим образом:

<option value="1">Option 1</option>
<option value="2">Option 2</option>

В настоящее время у меня есть параметры, определенные как методы класса в MyModel, а именно:

def self.options
 [['Option 1', 1], ['Option 2', 2]]
end

Без i18n у меня было следующее:

f.input :dropdown, collection: MyModel::boolean, include_blank: false

Добавив локали, я попытался

f.input :dropdown, collection: t(MyModel::boolean, scope: 'simple_form'), include_blank: false

Но это вызывает ошибку:

отсутствует перевод: en.simple_form.Option 1.1

Похоже, что он ищет в переводе как ключ массива, так и значение.

Любые предложения, как заставить i18n работать для коллекции?


person Matthias    schedule 21.05.2016    source источник
comment
Не уверен, что понимаю проблему. Почему бы не добавить в вашу модель обратный вызов before_save, который преобразует эти значения 1 2 и т. д. в целое число? Например, 1.to_i   -  person bkunzi01    schedule 22.05.2016
comment
Вопрос в том, как заставить i18n работать в таком случае. Ваш call_back является полезным советом по сохранению данных. Есть идеи по i18n?   -  person Matthias    schedule 22.05.2016
comment
Хм, возможно, лучше оставить коллекцию такой же, но изменить только представление для пользователя? Я опубликую то, что я думаю.   -  person bkunzi01    schedule 22.05.2016


Ответы (1)


Поскольку коллекции простых форм принимают процедуры, вы можете вызвать блок в методе label_method, который будет форматировать вашу строку по мере необходимости, что может быть тем, что вы ищете:

f.input :dropdown, collection: MyModel::boolean, include_blank: false, :label_method => lambda { |item| t(item.last) }
person bkunzi01    schedule 21.05.2016