用于播种 JSON 数据的 Ecto 语法

Ecto syntax for seeding JSON data

我是 Elixir 和 Phoenix 的新手,我不知道在我的 seeds.exs 文件中使用正确的语法将 JSON 插入 Postgres JSON 列。这是我要插入的示例。

Repo.insert! %Language{
    page: "accounts",
    code: "en-us",
    mode: "all",
    language: { "username_email" : "Username or email address", 
                 "password" : "Password", 
                 "invalid_username_password" : "Invalid username or password"
              }
}, prefix: :lookups

但我没有尝试过。我只需要将文字 JSON 插入数据库。

这段代码有几个问题。

Elixir 地图具有以下语法:

map = %{foo: 42, bar: :baz}

注意它的百分号,键和冒号之间缺少 space 并且键确实没有引号。当需要使用字符串作为键时,仍然可以使用 hashrocket 语法:

map = %{"foo" => 42}

但这不是您需要的。

此外,根据发布的错误消息,您可能忘记了为您的 Language 结构设置别名 and/or 使用完全限定的名称。总结一下,正确的代码是:

Repo.insert! %MyData.Language{
  page: "accounts",
  code: "en-us",
  mode: "all",
  language: %{
    username_email: "Username or email address",
    password: "Password",
    invalid_username_password: "Invalid"
  }
}, prefix: :lookups