如何跳过chageset管道中的验证

时间:2017-01-07 01:42:04

标签: elixir phoenix-framework ecto

使用简单变更集的给定示例:

def changeset(struct, params \\ %{}) do
  struct
  |> cast(params, [:email, :password])
  |> validate_required([:email, :password])
  |> validate_something
end

如果前一个validate_something/1失败,那么跳过validate_required/3验证的最佳方法是什么?

最明显的是将所有内容包装在if/else语句中,如:

defp validate_something(changeset) do
  if changeset.valid? do
    ...
  else
    changeset
  end
end

但我更喜欢使用类似保护条款的东西而不用arrowing我的代码。

1 个答案:

答案 0 :(得分:2)

找到更好的方法:

defp validate_something(%{valid?: true} = changeset) do
  ...
end
defp validate_something(changeset), do: changeset