gpt4 book ai didi

两个属性之一的 Ecto validate_required

转载 作者:行者123 更新时间:2023-12-01 11:24:38 26 4
gpt4 key购买 nike

验证变更集的两个属性中的任何一个是否存在的最佳方法是什么?

仅当两个属性均未提供时,验证才会失败

例如考虑一个具有属性的 User 模型:name, :uid, :email, :phone

  • :name 必须始终存在
  • :email 或 :uid 应该存在
  • :电话是可选的

  • 这行得通吗?
      def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, [:name,:email,:uid,:phone])
    |> validate_required([:name, :email]) || validate_required([:name, :uid]
    end
    end

    最佳答案

    您可以从以下内容开始:

    def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, ~w(name email uid phone)a)
    |> validate_required(:name)
    |> validate_required_params(params)
    end
    end

    def validate_required_params(changeset, %{"uid" => _}) do
    changeset
    |> validate_required(:uid)
    end

    def validate_required_params(changeset, %{"email" => _}) do
    changeset
    |> validate_required(:email)
    end

    def validate_required_params(changeset, _params) do
    changeset
    |> add_error(:params, "either :uid or :email is required")
    end

    但是您还需要检查例如 uidemail提供。这种情况怎么办?

    关于两个属性之一的 Ecto validate_required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38602195/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com