凤凰表单验证检查未显示但是来自postgres的非空约束

时间:2018-01-03 22:02:30

标签: 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

这可能是因为迁移:

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

通过编程凤凰书,不幸的是有点过时,我找不到这个问题的快速解决方案。

不知何故,Postgres不应该在验证检查之前到来。如何解决这个错误的想法消失了?

1 个答案:

答案 0 :(得分:1)

如果它不起作用,我假设您使用的是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

您可以在Ecto.Changeset.validate_required/3的文档中查看更多详细信息。

希望有所帮助!