我想在我的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

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

最佳答案

传递给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

关于elixir - 如何在phoenix框架中将自定义验证规则应用于模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36961176/

10-10 17:20