我有凤凰模特:
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)},
}));
凤凰城有可能吗?
答案 0 :(得分: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
如果您已经在数据库中没有这些字段,那么您也必须在迁移中执行类似的循环。