如何将自定义验证规则应用于phoenix框架中的模型

Jer*_*Ges 6 elixir ecto phoenix-framework

我想在我的ecto模型中添加自定义验证规则.

假设我有这段代码:

  def changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
    |> validate_length(:description, min: 280)
    |> my_awesome_validation(:email)
  end

  def my_awesome_validation(email) do 
    # ??
  end
Run Code Online (Sandbox Code Playgroud)

我应该在my_awesome_validation函数中写什么来抛出错误等等?

Dog*_*ert 10

你进入的方式my_awesome_validation,它将changeset作为第一个参数,原子:email作为第二个参数.

这是验证给定字段是否包含至少一个的方法@:

def my_awesome_validation(changeset, field) do 
  value = get_field(changeset, field)
  if value =~ "@" do
    changeset
  else
    add_error(changeset, field, "does not contain '@'")
  end
end
Run Code Online (Sandbox Code Playgroud)