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 列表即可。