Elixir 如果存在两个字段,则进行EXTO条件验证
我试图只在模型存在两个字段的情况下对模型进行一些验证 就像这样:Elixir 如果存在两个字段,则进行EXTO条件验证,elixir,ecto,Elixir,Ecto,我试图只在模型存在两个字段的情况下对模型进行一些验证 就像这样: if Changeset.get_field(changeset, :field_a) or Changeset.get_field(changeset, :field_b) do changeset |> a_lot_of_validations else changeset end 问题是:当出现字段a或字段b时,它们返回字符串,因此这里会出现参数错误,因为 "string" or "string" 返回
if Changeset.get_field(changeset, :field_a) or Changeset.get_field(changeset, :field_b) do
changeset
|> a_lot_of_validations
else
changeset
end
问题是:当出现字段a
或字段b
时,它们返回字符串
,因此这里会出现参数错误,因为
"string" or "string"
返回elixir中的argumenterror。实现not(is_nil(get_字段))
将行长度设置得很长(现在甚至很长),因此我对实现此条件验证的干净方法很好奇。而不是not(is_nil(u))
和或,您只需使用|
即可,它将nil
和false
视为虚假,将所有其他内容视为真实的exto.Changeset.get_字段
对于字符串字段永远不会返回false
:
if Changeset.get_field(changeset, :field_a) || Changeset.get_field(changeset, :field_b) do
changeset
|> a_lot_of_validations
else
changeset
end
如果您已经导入了exto.Changeset
(在Phoenix机型中默认情况下导入),则可以删除变更集。
:
if get_field(changeset, :field_a) || get_field(changeset, :field_b) do
changeset
|> a_lot_of_validations
else
changeset
end
您可以使用|
而不是not(is_nil())
和或,它将nil
和false
视为虚假,其他一切视为真实的exto.Changeset.get\u字段对于字符串字段永远不会返回false
:
if Changeset.get_field(changeset, :field_a) || Changeset.get_field(changeset, :field_b) do
changeset
|> a_lot_of_validations
else
changeset
end
如果您已经导入了exto.Changeset
(在Phoenix机型中默认情况下导入),则可以删除变更集。
:
if get_field(changeset, :field_a) || get_field(changeset, :field_b) do
changeset
|> a_lot_of_validations
else
changeset
end
我以前不知道这一点。谢谢我以前不知道这一点。谢谢