Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir Can';t在菲尼克斯用外太空模型制作JSONB_Elixir_Phoenix Framework_Jsonb_Ecto - Fatal编程技术网

Elixir Can';t在菲尼克斯用外太空模型制作JSONB

Elixir Can';t在菲尼克斯用外太空模型制作JSONB,elixir,phoenix-framework,jsonb,ecto,Elixir,Phoenix Framework,Jsonb,Ecto,我一直在尝试将JSON保存在postgresql的jsonb列中,我也尝试过教程,也开始阅读Ecto API和Postgrex,但无法使其工作,一个工作示例将启发我:)到目前为止,我已将其添加到配置中 config :bonsai, Bonsai.Repo, adapter: Ecto.Adapters.Postgres, username: "demo", password: "demo123", database: "bonsai_test", hostname: "lo

我一直在尝试将JSON保存在postgresql的jsonb列中,我也尝试过教程,也开始阅读Ecto API和Postgrex,但无法使其工作,一个工作示例将启发我:)到目前为止,我已将其添加到配置中

config :bonsai, Bonsai.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "demo",
  password: "demo123",
  database: "bonsai_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox,
  extensions: [{Postgrex.Extensions.JSON, [library: Poison]}]
这是我的模型

defmodule Bonsai.Organization do
  use Bonsai.Web, :model

  schema "organizations" do
    field :name, :string
    field :currency, :string
    field :tenant, :string
    field :info, Bonsai.Json.Type, default: %{}
    field :settings, :map, default: %{} #, :map#, Bonsai.Json.Type

    timestamps
  end

  @required_fields ~w(name currency tenant)
  @optional_fields ~w()

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end
end
类型的定义在
web/utils/json.ex

defmodule Bonsai.Json.Type do
  @behaviour Ecto.Type
  alias Bonsai.Json

  def type, do: :json

  def load({:ok, json}), do: {:ok, json}
  def load(value), do: load(Poison.decode(value))

  def dump(value), do: Poison.encode(value)
end
当我尝试测试时,我无法保存信息或设置映射

defmodule Bonsai.OrganizationTest do
  use Bonsai.ModelCase

  alias Bonsai.Organization

  @valid_attrs %{currency: "USD", name: "Home", tenant: "bonsai",
    settings: %{"last_save" => true},
    info: %{"address" => "Samaipata", "mobile" => "73732677", "age" => 40}
  }
  test "Store json data" do
    changeset = Organization.changeset(%Organization{}, @valid_attrs)
    {:ok, org} = Bonsai.Repo.insert(changeset)
    assert @valid_attrs.info() == org.info
  end
end

我不知道为什么它不适合你,但是:

确保您拥有最新的postgresql版本,json支持有点新

这对我有用,也许有帮助

  • 迁移文件

    def change do
    create table(:objects) do
     add :drawing, :jsonb
     timestamps
    end
    
  • 我也使用json字段,但在我的模型中它是一个映射:

     use .Web, :model
      schema "objects" do
       field :drawing, :map
       timestamps
      end
    

谢谢,是的,它没有任何改变。我一直在阅读一本旧教程,在过去它更复杂。答案有效,但我试图嵌入一个关系和另一个字段,将其保留为地图,使用json更困难。通过这种方式,您可以检查我关于收到警告的新问题