2017-01-30 57 views
2

我有一個鳳凰模式:添加前綴場在菲尼克斯模型

schema "news" do 
    field :title_ru,    :string 
    field :title_en,    :string 
    field :title_uk,    :string 
end 

我要自動執行此。例如,我有一個語言列表:

languages = ['ru', 'en', 'uk'] 

我想自動添加前綴到字段。像這樣的東西(NodeJS):

var langs = ['ru', 'en', 'uk'] 
var i18n = (obj) => { 
    var result = {}; 
    _.mapKeys(obj, (value, key) => langs.forEach((lang) => { 
    result[`${key}_${lang}`] = value; 
    })); 

    return result; 
} 

.. in model 

_.merge(CityModel, i18n({ 
    title: {type: DataTypes.STRING(64)}, 
})); 

它可能在鳳凰城嗎?

回答

2

是的,你可以從變量在編譯時這樣字段添加到架構:

@columns [%{name: "title", type: :string}, %{name: "content", type: :string}] 
@languages ~w(ru en uk) 

schema "news" do 
    for %{name: name, type: type} <- @columns, language <- @languages do 
    field :"#{name}_#{language}", type 
    end 
end 

,這將產生以下字段/類型:

:title_ru, :string 
:title_en, :string 
:title_uk, :string 
:content_ru, :string 
:content_en, :string 
:content_uk, :string 

如果沒有這些字段已經在數據庫中,您也必須在遷移中做類似的循環。

+0

謝謝,它的工作! –

+0

@AlexMarchenko我剛剛添加了一個嵌套循環的例子,類似於你的問題。希望也有幫助! – Dogbert