gpt4 book ai didi

ecto - Phoenix 框架 - 自定义变更集验证

转载 作者:行者123 更新时间:2023-12-03 23:29:32 26 4
gpt4 key购买 nike

我对凤凰和 Elixir 真的很陌生,所以如果这些问题看起来很简单,我深表歉意。在考虑将其发布在这里之前,我已经搜索了堆栈溢出和博客。

我在模型中有 2 个字段,字段 A:整数和字段 B:整数。在使用我的变更集进行验证时,我想创建一个自定义验证,以在创建新项目时检查字段 A 是否大于字段 b,如果是,则闪烁一条错误消息并将它们带回 :new 路由。对不起,如果我没有使用正确的术语。

所以我想这现在变成了一个两部分的问题。首先,我应该通过创建自定义验证在我的模型中执行此操作还是应该在 Controller 中执行此操作?其次,在 phoenix 中写这个的最简单方法是什么?

再次感谢。

最佳答案

我不得不做这件事,我花了一些时间才弄明白。我结束了为变更集编写自定义验证器。

def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
|> validate_a_less_eq_b
end

defp validate_a_less_eq_b(changeset) do
a = get_field(changeset, :a)
b = get_field(changeset, :b)

validate_a_less_eq_b(changeset, a, b)
end
defp validate_a_less_eq_b(changeset, a, b) when a > b do
add_error(changeset, :max, "'A' cannot be more than 'B'")
end
defp validate_a_less_eq_b(changeset, _, _), do: changeset

当然,您会希望使用常规验证器来确保 a 和 b 是有效数字。

关于ecto - Phoenix 框架 - 自定义变更集验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35257104/

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