如何使Ecto.changeset validate_required接受空白值?

时间:2017-08-18 10:16:51

标签: erlang elixir phoenix-framework ecto changeset

我要做的是将空字符串作为字段的值传递,并验证它是否为nil。问题是validate_required会在nil和空值上引发错误。如何让它接受空白值?

模式

  schema "messages" do
    field :user_id, :string
    field :text, :string

    timestamps()
  end

变更

  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:text, :user_id])
    |> validate_required([:text, :user_id])
  end

1 个答案:

答案 0 :(得分:5)

遗憾的是,validate_required def changeset(struct, params \\ %{}) do struct |> cast(params, [:text, :user_id]) |> validate_not_nil([:text, :user_id]) end def validate_not_nil(changeset, fields) do Enum.reduce(fields, changeset, fn field, changeset -> if get_field(changeset, field) == nil do add_error(changeset, field, "nil") else changeset end end) end 的行为只考虑空白以及空白字符串。但是,您可以编写一个简单的函数来进行验证:

nil

该函数遍历每个字段,为每个具有值var radians = deg / 180 * Math.Pi; var cos = Math.cos(radians), sin = Math.sin(radians); var matrix = [cos, sin, -sin, cos]; 的字段添加错误。