2011-04-23 26 views
2

在我的應用程序有許多途徑像:user_login/resource/resource_name店UTF8字符串,但驗證和參數transliteriated

例如:

:vlad/photo_albums/my-first-album 

用戶應該能夠用自己的母語namings創建一個相冊(在我的情況下是俄語)。但是,如果用戶將他的相冊命名爲「Привет,Мир!」 (這是英文中的「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

存儲,驗證和搜索非拉丁字符是完全正確的。大多數提供其應用程序的多語言和國際版本的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 
+0

好的,感謝您祛除我的疑惑;) – 2011-04-25 04:56:52