我正在研究一些Phoenix框架,我遇到了一个奇怪的问题(像往常一样)。每当我尝试创建一些用户时,我都会将User的所有字段设置为nil。我正在使用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
来自控制台的屏幕:
正如你在图片中看到的那样,登录和密码字段都是nils,这让我觉得我做了一些非常愚蠢的事情。
答案 0 :(得分:3)
字段需要存在于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
列表。