我有一個遺留的數據庫表,有列name_en和name_es,並想知道什麼最好的方式來查詢ActiveRecord爲基於用戶的i18n偏好翻譯會是。Rails I18n通過數據庫列
我看到Rails的i18n實現更傾向於將翻譯存儲在單獨的散列或表中,但我不想更改數據庫的結構。
目前在老的PHP應用程序,我送參數傳遞給MySQL查詢替換名_ 郎和當我打電話行的ID顯示返回name_en
或name_es AS name
。
我有一個遺留的數據庫表,有列name_en和name_es,並想知道什麼最好的方式來查詢ActiveRecord爲基於用戶的i18n偏好翻譯會是。Rails I18n通過數據庫列
我看到Rails的i18n實現更傾向於將翻譯存儲在單獨的散列或表中,但我不想更改數據庫的結構。
目前在老的PHP應用程序,我送參數傳遞給MySQL查詢替換名_ 郎和當我打電話行的ID顯示返回name_en
或name_es AS name
。
您應該創造你把一個初始化:
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
沒有已經存在的表。
使用[範圍](http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html)似乎是一個好方法。 – Zabba
@Zabba:示波器在那裏實現會有點長 – apneadiving