在我的应用中有许多路线,例如: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文件概念。
我需要你的思考如何正确安排这个,以及最优雅的方式。还是我迂腐呢?是否可以存储/搜索/验证/显示非拉丁字符?
答案 0 :(得分:1)
存储,验证和搜索非拉丁字符完全没问题。大多数提供多语言和国际版本应用程序的Ruby on Rails公司在应用程序和数据库层中使用UTF-8。 UTF-8可以在Ruby on Rails和所有主流浏览器中正确参数化,显示和验证,因此您不应该在那里看到任何问题。处理此问题的最佳方法是将数据库编码和/或表字符串编码设置为UTF-8,然后在application.rb
中设置Ruby on Rails编码:
config.encoding = "UTF-8"
如果您使用的是MySQL或Postgres,您可能还希望在database.yml文件中明确说明数据库编码:
development:
adapter: mysql2
database: development_db
user: root
password:
encoding: utf8