gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:37:33 25 4
gpt4 key购买 nike

我正在处理一个 phoenix 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

运行迁移时,出现以下错误:

** (ArgumentError) unknown default ["Event", "Facebook", "Google/Online"] for type {:array, :string}. :default may be astring, number, boolean, empty list, map (when type is Map), or a fragment(...)



似乎在使用 {:array, input_type} 时,除了默认值的空列表之外不可能有任何东西。 .

我试图用默认值做的事情实际上是一种黑客行为,并且有更好的方法来做到这一点吗?或者,如果我想要做的是首选方法,是否可以使用 hack 来做同样的事情?任何帮助表示赞赏。

最佳答案

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

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

添加了对空数组的支持 in 2015但不是非空数组。我认为他们愿意添加此功能。您可能想在他们的 mailing list 上询问核心开发人员.

关于elixir - 无法在使用 Ecto 迁移时为字符串数组列( Elixir 列表)创建默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com