在Phoenix模型中为字段添加前缀

时间:2017-01-30 09:40:22

标签: elixir phoenix-framework

我有凤凰模特:

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)},
}));

凤凰城有可能吗?

1 个答案:

答案 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

如果您已经在数据库中没有这些字段,那么您也必须在迁移中执行类似的循环。