ChangeSet Ecto.Model Struct 的所有字段都为 nil
ChangeSet Ecto.Model all fields of Struct are nil
我正在开发一些 Phoenix 框架,我遇到了一个奇怪的问题(和往常一样)。每当我尝试创建一些用户时,我都会得到所有字段都设置为零的用户。我正在使用 Mongo.Ecto/
def post_login(conn, %{"login" => login, "password" => password}) do
# IO.inspect Plug.Conn.read_body(conn)
a = User.changeset(%User{}, %{"login" => "login", "password" => "password"})
IO.inspect a
Repo.insert( a )
redirect conn, to: "/default"
end
和模型:
defmodule HelloWorld.User do
use HelloWorld.Web, :model
@primary_key {:id, :binary_id, autogenerate: true}
schema "users" do
field :login, :string
field :password, :string
end
@required_fields ~w()
@optional_fields ~w()
def changeset(model, params \ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
以及来自控制台的屏幕:
正如你在图片中看到的,登录名和密码字段都是 nil,这让我觉得我做了一些非常愚蠢的事情。
字段需要存在于 cast/4 函数的选项中:
@required_fields ~w()
@optional_fields ~w(login password)
def changeset(model, params \ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
required_fields
中但不在 params
中的任何内容都会向变更集上的该字段添加错误。如果您希望这些字段成为必填字段,只需将它们移至 required_fields
列表即可。
我正在开发一些 Phoenix 框架,我遇到了一个奇怪的问题(和往常一样)。每当我尝试创建一些用户时,我都会得到所有字段都设置为零的用户。我正在使用 Mongo.Ecto/
def post_login(conn, %{"login" => login, "password" => password}) do
# IO.inspect Plug.Conn.read_body(conn)
a = User.changeset(%User{}, %{"login" => "login", "password" => "password"})
IO.inspect a
Repo.insert( a )
redirect conn, to: "/default"
end
和模型:
defmodule HelloWorld.User do
use HelloWorld.Web, :model
@primary_key {:id, :binary_id, autogenerate: true}
schema "users" do
field :login, :string
field :password, :string
end
@required_fields ~w()
@optional_fields ~w()
def changeset(model, params \ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
以及来自控制台的屏幕:
正如你在图片中看到的,登录名和密码字段都是 nil,这让我觉得我做了一些非常愚蠢的事情。
字段需要存在于 cast/4 函数的选项中:
@required_fields ~w()
@optional_fields ~w(login password)
def changeset(model, params \ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
required_fields
中但不在 params
中的任何内容都会向变更集上的该字段添加错误。如果您希望这些字段成为必填字段,只需将它们移至 required_fields
列表即可。