2017-01-30 6 views
2

のフィールドに接頭辞を追加します。例では、私は言語のリストがあります:は、私はフェニックスのモデルを持っているフェニックスモデル

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

はい、あなたは次のようにコンパイル時に変数からスキーマにフィールドを追加することができます:あなたが持っていない場合は

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

@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 

これは、次のフィールド/タイプを生成しますこれらのフィールドはすでにデータベース内にあるため、移行時にも同様のループを実行する必要があります。

+0

ありがとう、その仕事! –

+0

@AlexMarchenkoあなたの質問と同様に、ネストループの例も追加しました。あまりにも役立つことを願って! – Dogbert

関連する問題