хранить строки utf8 в БД, но проверять и параметризировать транслитерированные - PullRequest
2 голосов
/ 24 апреля 2011

В моем приложении есть несколько маршрутов, например :user_login/resource/resource_name

пример:

:vlad/photo_albums/my-first-album

Пользователи должны иметь возможность создавать альбомы с именами на родном языке (в моем случае эторусский ).Но если пользователь назвал свой альбом, например, "Привет, Мир!"(что на английском языке «Hello World!»), я хочу использовать строку, в которой все буквы русского алфавита заменены на похожую латиницу в ссылке на ресурс.Например, пользователь предоставляет название альбома "Привет Мир!"и соответствующая ссылка выглядит как vlad / photo_albums / privet-mir.

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

Первая проблема в том, что мне нужно найти альбом по названию:

@album = @user.albums.
        where( :title => params[:album_title] ).first
    redirect_to user_albums_path(@user) unless @album

Я бы очень хотел избежать использования чего-либо, кроме латиницы в моих выражениях sql.

Вторая проблема заключается в том, что я не хочу запускать проверки для нелатинской строки (должен ли я быть?), Поэтому я хочу латинизировать и параметризовать ее перед проверкой, но все же сохранить исходную строку, если она является латинизированной версиейпрошел проверку:

  validates :title, :presence => true, :length => { :within => (2..25) },
            :allow_blank => false, :uniqueness => { :scope => :user_id }

То, о чем я думал, чтобы выполнить это, было сериализацией хэша, например {: latin_version => ...,: original_version => ..} или отдельными концепциями файла yaml.

Мне нужны ваши мысли о том, как правильно это организовать и как это было бы самым элегантным способом.Или я к этому педантичен?Было бы хорошо просто хранить / искать / проверять / отображать нелатинские символы?

1 Ответ

1 голос
/ 24 апреля 2011

Вполне нормально хранить, проверять и искать нелатинские символы. Большинство компаний Ruby on Rails, которые предоставляют многоязычные и международные версии своих приложений, используют UTF-8 на уровне приложений и баз данных. UTF-8 может быть правильно параметризован, отображен и проверен в Ruby on Rails и во всех основных браузерах, поэтому вы не должны видеть никаких проблем там. Лучший способ справиться с этим - установить для вашей кодировки базы данных и / или кодирования строки таблицы значение UTF-8, а затем кодирование Ruby on Rails в application.rb:

config.encoding = "UTF-8"

Если вы используете MySQL или Postgres, вы, вероятно, также захотите четко указать кодировку базы данных в файле database.yml:

development:  
  adapter: mysql2  
  database: development_db  
  user: root  
  password:  
  encoding: utf8 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...