2011-07-14 51 views
4

我有一個遺留的數據庫表,有列name_en和name_es,並想知道什麼最好的方式來查詢ActiveRecord爲基於用戶的i18n偏好翻譯會是。Rails I18n通過數據庫列

我看到Rails的i18n實現更傾向於將翻譯存儲在單獨的散列或表中,但我不想更改數據庫的結構。

目前在老的PHP應用程序,我送參數傳遞給MySQL查詢替換名_ 和當我打電話行的ID顯示返回name_enname_es AS name

+0

使用[範圍](http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html)似乎是一個好方法。 – Zabba

+0

@Zabba:示波器在那裏實現會有點長 – apneadiving

回答

11

您應該創造你把一個初始化:

class ActiveRecord::Base 
    def self.has_translation(*attributes)  
    attributes.each do |attribute| 
     define_method "#{attribute}" do 
     self.send "#{attribute}_#{I18n.locale}" 
     end 
    end 
    end 
end 

然後在您的機型:

has_translation :name, :whatever 

因此,它會根據您的當前區域自動調用適當的列名。在你看來:

@variable.name # calling @variable.name_en if locale = :en 
       #   @variable.name_es if locale = :es 

當然,我認爲有一個名叫name沒有已經存在的表。

+0

它不回答? – apneadiving

+0

非常棒!謝謝。 – jyunderwood

+0

不客氣,有趣的問題btw! – apneadiving