Ecto可以验证格式,包含,唯一性等,但我看不出如何验证状态?是否有一种方法可以在字段为空时向字段添加错误?像RoR中的validates_presence_of
一样?我可以手动创建它,这不是问题,但我想知道是否有一个已经存在的方法,如validate_presence\3
或其他什么?
答案 0 :(得分:3)
只需在模型中使用 required_fields 注释器。
@required_fields ~w(name email)
对于总共包含4个字段和2个必填字段的Customer模型,如下所示:
defmodule HelloPhoenix.Customer do
use HelloPhoenix.Web, :model
schema "customers" do
field :name, :string
field :email, :string
field :bio, :string
field :number_of_pets, :integer
timestamps
end
@required_fields ~w(name email)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
Phoenix将自动验证所需字段的存在,并在表单顶部显示错误消息,如下所示: