gpt4 book ai didi

elixir - 无法在 Phoenix 使用 Ecto 模型制作 JSONB

转载 作者:行者123 更新时间:2023-12-04 18:34:50 25 4
gpt4 key购买 nike

我一直在尝试将 JSON 保存在 postgresql 的 jsonb 列中,我尝试过 this教程,并开始阅读 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

当我尝试测试时,我无法保存信息或设置 map
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 字段,但在我的模型中它是一张 map :
     use .Web, :model
    schema "objects" do
    field :drawing, :map
    timestamps
    end
  • 关于elixir - 无法在 Phoenix 使用 Ecto 模型制作 JSONB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000479/

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