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 如何在iex命令行中输入:binary_id?_Elixir_Ecto_Elixir Iex - Fatal编程技术网

Elixir 如何在iex命令行中输入:binary_id?

Elixir 如何在iex命令行中输入:binary_id?,elixir,ecto,elixir-iex,Elixir,Ecto,Elixir Iex,我正在用Elixir编写一个应用程序,使用Postgres作为数据存储。在EXTO中,我定义了这个实体: defmodule MyModule.User do use Ecto.Schema import Ecto.Changeset @primary_key {:id, :binary_id, autogenerate: true} schema "users" do field :email, :string end @fields ~w(email)

我正在用Elixir编写一个应用程序,使用Postgres作为数据存储。在EXTO中,我定义了这个实体:

defmodule MyModule.User do
  use Ecto.Schema
  import Ecto.Changeset

  @primary_key {:id, :binary_id, autogenerate: true}
  schema "users" do
    field :email, :string
  end

  @fields ~w(email)

  def changeset(data, params \\ %{}) do
    data
    |> cast(params, @fields)
    |> validate_required([:email])
    |> validate_length(:email, max: 128)
    |> unique_constraint(:email)
  end
end
然后,我可以通过键入以下内容将记录保存在
iex
-终端的数据库中:

iex> user1 = MyModule.User.changeset(%MyModule.User{}, %{email: "foo@bar.com"})
iex> MyModule.Repo.insert!(user1)
一切正常,记录保存。但是当我尝试使用
Repo.get()
检索它时:

我得到这个错误:

** (Ecto.Query.CastError) deps/ecto/lib/ecto/repo/queryable.ex:320:
value `0` in `where` cannot be cast to type :binary_id in query:

from u in ScorecardBackend.User,
  where: u.id == ^0,
  select: u

  (elixir) lib/enum.ex:1755: Enum."-reduce/3-lists^foldl/2-0-"/3
  (elixir) lib/enum.ex:1325: Enum."-map_reduce/3-lists^mapfoldl/2-0-"/3

我的问题:有没有办法在
iex
-命令行中键入
:二进制\u id
文本?非常感谢

A
binary\u id
字段在Elixir中表示为一个字符串,因此您需要将一个字符串传递给
Repo.get
,其中包含
binary\u id
,例如:

MyModule.Repo.get(MyModule.User, "0e31998f-503f-4218-a801-c8bb7ff9498b")
二进制id
字段的确切长度和格式取决于数据库。在PostgreSQL中,它是一个UUID,自动生成的默认UUID是一个随机UUID。您可以查看通过获取所有记录生成的ID:

MyModule.Repo.all(MyModule.User)

binary\u id
字段在Elixir中表示为字符串,因此您需要将包含
binary\u id
的字符串传递给
Repo.get
,例如:

MyModule.Repo.get(MyModule.User, "0e31998f-503f-4218-a801-c8bb7ff9498b")
二进制id
字段的确切长度和格式取决于数据库。在PostgreSQL中,它是一个UUID,自动生成的默认UUID是一个随机UUID。您可以查看通过获取所有记录生成的ID:

MyModule.Repo.all(MyModule.User)