我正在尝试对电子邮件或电话号码执行变更集验证,我在@Dogbert here找到了一个漂亮的OR变更集功能 - 但我无法让我的OR验证流程正常工作。< / p>
有人介意快速查看为何电子邮件或电话验证始终返回usermanager.GetClaimsAsync
变更集吗?
ALTER PROCEDURE GetRe
(@a INT, @b INT)
AS
BEGIN
DECLARE @Sum INT
SET @Sum = @a + @B
SELECT TOP @Sum *
FROM Customer
END
提前致谢!
答案 0 :(得分:1)
您未在validate_required_inclusion_format
中正确返回修改后的变更集。在Elixir中,块中的最后一个值是其返回值。在if语句中,true和false分支的最后一个值是它的返回值。如果您没有else分支且条件为false,则返回值为nil
。
以下是解决问题的最简单方法:使用if
加入两个顶级changeset
和后退||
:
defp validate_required_inclusion_format(changeset, fields) do
if Enum.member?(fields, :email) do
value = get_field(changeset, :email)
if value && value != "" do
IO.inspect(value, label: "email found: ")
changeset
|> email_changeset()
end
end || # <- note this
if Enum.member?(fields, :phone) do
value = get_field(changeset, :phone)
if value && value != "" do
IO.inspect(value, label: "phone found: ")
changeset
|> phone_changeset()
end
end || # <- and this
changeset
end
现在,如果未满足第一个或第二个if
条件,您将获得nil
,并且将评估第三个if
。如果第三个或第四个也未满足,则将返回最终后备changeset
。
注意:此功能的命名具有误导性。与您之前的答案中使用的功能不同,您在这里根本不使用fields
。最好不要将fields
传递给此函数,并将其称为add_email_or_phone_changeset
,例如
if value = get_field(changeset, :email) do
...
end ||
if value = get_field(changeset, :phone) do
...
end || ...