Ich schreibe eine Anwendung in Elixir mit Postgres als Datenspeicher. In Ecto, definiert ich diese Einheit:Wie man eingibt: binary_id in iex Befehlszeile?
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
Dann kann ich einen Datensatz in der db in iex
-terminale, indem Sie sparen:
iex> user1 = MyModule.User.changeset(%MyModule.User{}, %{email: "[email protected]"})
iex> MyModule.Repo.insert!(user1)
Alles läuft ok und der Datensatz wird gespeichert. Aber wenn ich versuche, es zurückzuholen mit Repo.get()
:
iex> MyModule.Repo.get(MyModule.User, 0)
ich diesen Fehler:
** (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
Meine Frage: Gibt es eine Möglichkeit :binary_id
Literale in der iex
-command Linie zu geben? Danke vielmals!