Ruby on rails -将utf8字符串存储在db中,但验证和参数化音译



在我的应用程序中有许多路由,如: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文件概念。

我需要你的想法,关于如何妥善安排这将是最优雅的方式。还是我太迂腐了?仅仅存储/搜索/验证/显示非拉丁字符是否合适?

存储、验证和搜索非拉丁字符完全没问题。大多数提供多语言和国际版本应用程序的Ruby on Rails公司在应用程序层和数据库层使用UTF-8。UTF-8可以在Ruby on Rails和所有主流浏览器中正确地参数化、显示和验证,因此您应该不会看到任何问题。处理此问题的最佳方法是将数据库编码和/或表字符串编码设置为UTF-8,然后将Ruby on Rails编码设置为application.rb:

config.encoding = "UTF-8"

如果你正在使用MySQL或Postgres,你可能还需要明确数据库中的数据库编码。yml文件:

development:  
  adapter: mysql2  
  database: development_db  
  user: root  
  password:  
  encoding: utf8 

相关内容

  • 没有找到相关文章

最新更新