Postgresql Phoenix表单验证检查未显示,但来自postgres的非空约束
当尝试构建表单验证时,当我使用超过20个字符的用户名时,我的错误会显示在表单中,但当我不输入任何内容时,错误不会显示在表单中。我得到一个违反非空约束的Postgres.Error视图Postgresql Phoenix表单验证检查未显示,但来自postgres的非空约束,postgresql,elixir,phoenix-framework,Postgresql,Elixir,Phoenix Framework,当尝试构建表单验证时,当我使用超过20个字符的用户名时,我的错误会显示在表单中,但当我不输入任何内容时,错误不会显示在表单中。我得到一个违反非空约束的Postgres.Error视图 # user.ex def changeset(model, params \\ %{}) do model |> cast(params, ~w(name username), []) |> validate_length(:username, min: 1, max: 20) end
# user.ex
def changeset(model, params \\ %{}) do
model
|> cast(params, ~w(name username), [])
|> validate_length(:username, min: 1, max: 20)
end
这可能是因为迁移:
def change do
create table(:users) do
add :name, :string
add :username, :string, null: false
add :password_hash, :string
timestamps
end
create unique_index(:users, [:username])
end
翻阅凤凰城的编程书,不幸的是它有点过时了,我找不到一个快速解决这个问题的方法
不知何故,博士后不应该在验证检查之前到来。你知道如何消除这个错误吗?如果它不起作用,我假设你使用的是Phoenix 1.3,所以试着修改一下代码
def changeset(model, params \\ %{}) do
model
|> cast(params, ~w(name username), [])
|> validate_length(:username, min: 1, max: 20)
end
为此:
def changeset(model, params \\ %{}) do
model
|> cast(params, ~w(name username))
|> validate_required([:username])
|> validate_length(:username, min: 1, max: 20)
end
您可以在的文档中查看更多详细信息
希望有帮助 您是否尝试过将
validate\u required([:username,:other\u fields])
添加到您的变更集管道中?我只是写了基本上能实现这一点的东西,我必须有点仔细,注意现在我(当然)得到了“不能为空”,而这本书显示了更合适的“应该至少为1个字符”这也是可能的。min:
部分只是在某种程度上忽略了它的功能。当然,同样的区别,我想我可以保留额外的代码行。