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

时间:2016-02-07 18:08:43

标签: phoenix-framework

我真的很喜欢凤凰和长生不老药,所以如果这些看似简单的问题,我很抱歉。在我考虑将其发布到此处之前,我已经搜索了堆栈溢出和博客。

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

所以我猜这现在变成了两个问题。首先,我是否应该通过创建自定义验证在我的模型中执行此操作,还是应该在控制器中?第二,在凤凰城写这个最简单的方法是什么?

再次感谢。

1 个答案:

答案 0 :(得分:19)

我必须做到这一点,我花了一点时间才弄明白。我结束了为变更集编写自定义验证器。

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是有效数字。