【问题标题】:How to make Ecto.changeset validate_required accept blank values?如何使 Ecto.changeset validate_required 接受空白值?
【发布时间】:2018-01-26 23:54:54
【问题描述】:

我正在尝试做的是传递一个空字符串作为字段的值,并验证它以检查是否不为零。问题是 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

【问题讨论】:

    标签: erlang elixir phoenix-framework ecto changeset


    【解决方案1】:

    不幸的是,validate_required 的行为是 hardcoded 将空字符串和仅空白字符串视为缺失。但是,您可以编写一个简单的函数来进行验证:

    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 的字段添加错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 2018-04-03
      • 2021-12-29
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      相关资源
      最近更新 更多