Rails — перевод базы данных на значения выбора пользователя

В моем приложении rails есть поле выбора со значениями fuel_types, такими как Oil, Gas, Petroleum, Diesel. Язык по умолчанию en, так что все в порядке. Когда пользователь меняет веб-сайт на французский, эти данные должны отображаться как французские, а когда пользователь отправляет форму, данные должны быть на французском, однако я не могу сделать это с помощью

fr:
  fuel_types:
    oil: ""
    gas: ""
    petroleum: ""  

Потому что тогда данные базы данных будут смешаны с языком fr и en. Затем я должен показать эти данные на странице шоу, если fr или en.

Возможно ли это с globalize3 gem ?

Я вижу, что статический контент в базе данных может быть переведен с помощью globalize3, но когда пользователь заполняет форму, это либо fr, либо en в соответствии с переменной локали, тогда база данных будет заполнена значениями en и fr, это сделает практически невозможным поиск данных и их обработку .

кстати: у меня есть модель, называемая fuel_types, со столбцами идентификаторов имен, в которых я сохраняю значения нефти, газа и нефти для отображения в теге select. Затем я сохраняю их в модель автомобиля.

ИЗМЕНИТЬ

В этом вы правы!. Но что, если у меня есть;

...
 <%= f.collection_select(:fuel_type,  Fuel.all, :name, :name, {}, class: "Select-control u-sizeFull") %>
... 

У меня есть модель под названием Fuel, и это топливо (принадлежит модели автомобиля) следует рассматривать как переменную локали. Тогда надо писать на одном языке в БД?


person Shalafister's    schedule 29.05.2016    source источник
comment
select работает с массивами пар ключ-значение, где ключ должен храниться в БД, а значение — это то, что пользователь видит в select. Просто передайте [[gas, gas_in_french], [oil, oil_in_french]] вместо просто [gas,oil].   -  person Dawid Gosławski    schedule 29.05.2016
comment
Еще одна вещь. я отредактировал вопрос   -  person Shalafister's    schedule 30.05.2016


Ответы (1)


Итак, для отредактированного вопроса: третий и четвертый аргумент могут быть чем угодно, что отвечает на вызов, поэтому вместо использования имени в четвертом аргументе используйте proc {|fuel| translate(fuel.name)} или любой другой метод перевода, который у вас есть, просто вызовите его в proc.

person Dawid Gosławski    schedule 30.05.2016