在使用Ecto迁移时,无法为字符串数组列(elixir列表)创建默认值

Dam*_*nis 4 elixir ecto phoenix-framework

我正在开发一个凤凰1.3项目(使用默认的postgres数据库),我正在尝试添加一个字符串数组列,其默认值为填充列表.

这是迁移:

defmodule DfyDashboard.Repo.Migrations.AddLeadSourceToOffice do
  use Ecto.Migration

  def change do
    alter table(:offices) do
      add :lead_sources, {:array, :string}, default: [
        "Event",
        "Facebook",
        "Google/Online",
      ]
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当我运行迁移时,我收到以下错误:

**(ArgumentError)["Event", "Facebook", "Google/Online"]类型的默认默认值{:array, :string}.:默认可以是astring,number,boolean,空列表,map(当type是Map时)或片段(...)

在使用时,似乎不可能有任何除静态列表之外的空列表{:array, input_type}.

我正在尝试使用默认实际上是一个hack并且有更好的方法来做它?或者,如果我想要做的是首选方法,是否有一个黑客,我可以用来做同样的事情?任何帮助表示赞赏.

Dog*_*ert 7

我不确定为什么Ecto只支持空数组作为默认值,但您fragment现在可以使用并在PostgreSQL语法中指定数组:

add :lead_sources, {:array, :string},
  default: fragment("ARRAY['Event', 'Facebook', 'Google/Online']")
Run Code Online (Sandbox Code Playgroud)

2015年增加对空数组的支持,但不是非空数组.我认为他们愿意添加此功能.您可能想在他们的邮件列表中询问核心开发人员.