gpt4 book ai didi

elixir - 在 Ecto 中对 OR 进行条件验证 - 需要 2 个字段中的 1 个

转载 作者:行者123 更新时间:2023-12-04 05:28:59 35 4
gpt4 key购买 nike

我如何对 OR 逻辑进行条件验证,我们检查是否存在 2 个值中的 1 个或两个值都存在。

因此,例如,如果我想检查以确保 emailmobile字段已填充...我希望能够将列表传递给 fieldsvalidate_required_inclusion验证列表中至少有 1 个字段不为空。

def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:email, :first_name, :last_name, :password_hash, :role, :birthdate, :address1, :address2, :city, :state, :zip, :status, :mobile, :card, :sms_code, :status])
|> validate_required_inclusion([:email , :mobile])
end


def validate_required_inclusion(changeset, fields, options \\ []) do

end

我怎样才能做这个有条件的 OR 验证?

最佳答案

您还可以在数据库中创建约束,例如通过编写迁移:

create(
constraint(
:users,
:email_or_mobile,
check: "(email IS NOT NULL) OR (mobile IS NOT NULL)"
)
)
并使用 check_constraint验证变更集:
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:email, :first_name, :last_name, :password_hash, :role, :birthdate, :address1, :address2, :city, :state, :zip, :status, :mobile, :card, :sms_code, :status])
|> check_constraint(
:users_table,
name: :email_or_mobile,
message: dgettext("errors", "can't be blank")
)
end

关于elixir - 在 Ecto 中对 OR 进行条件验证 - 需要 2 个字段中的 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212425/

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