Я работаю с устаревшей базой данных в Oracle, где кодировка базы данных установлена на «UTF-8», но таблицы могут быть в любой кодировке, например: «Windows-1252», «Latin1» и т. Д., Из-засохранить совместимость с устаревшим программным обеспечением.Пока мы переносим эти системы в Rails, но между тем они должны сосуществовать одновременно.В моем конкретном случае таблицы, с которыми я работаю, находятся в «Windows-1252».
Вот так настроен мой database.yml:
default: &default
adapter: oracle_enhanced
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: username
password: password
development:
<<: *default
database: development_database
encoding: utf8
Проблема в том, что всякий раз, когда я получаю объект ActiveRecord Relation и хочу показать его, мне приходится вручную проходить через негои преобразовать «Windows-1252» в кодировку «UTF-8», используя метод кодирования Ruby.
Например, предположим, что таблица User содержит только два атрибута: id и username, соответствующий код будет выглядеть следующим образом:
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id.encode('UTF-8', 'Windows-1252', invalid: :replace) %></td>
<td><%= user.username.encode('UTF-8', 'Windows-1252', invalid: :replace)%></td>
</tr>
<% end %>
</tbody>
Это не единственная проблема, когда мне нужно сгенерировать JSON из объекта ActiveRecord Relation, я получаю эту ошибку JSON :: GeneratorError: source sequence is illegal / malformed utf-8
и многие другие в зависимости от того, что я хочу сделать.
Вопрос заключается в следующем: есть ли способ установить окончание таблицы прямо в модели, в данном примере: user.rb
, и заставить рельсы автоматически преобразовывать исходную кодировку независимо от того, какая она есть, в другую, такую как "UTF8",в некотором роде, используемом в database.yml, только на этот раз конфигурация не для всей базы данных, а для таблицы?
Это, безусловно, сильно очистит мой код и очень поможет в процессе разработки.