Elixir 如果嵌套属性为nil,则拒绝验证并强制转换关联

Elixir 如果嵌套属性为nil,则拒绝验证并强制转换关联,elixir,phoenix-framework,nested-attributes,Elixir,Phoenix Framework,Nested Attributes,在phoenix变更集中是否有一种方法可以拒绝嵌套属性,而不强制转换或验证嵌套属性(如果嵌套属性都为零) 我正在寻找与rails相当的产品 接受:地址的\u嵌套\u属性\u,如果::all\u为空则拒绝\u 这不应该返回地址的验证错误,并且仍然允许持久化未列出的参数。我希望电子邮件和名字仍然被保存,而地址被忽略 # Example attrs %{"addresses" => %{"0" => %{"address_type" => nil, "city" => n

在phoenix变更集中是否有一种方法可以拒绝嵌套属性,而不强制转换或验证嵌套属性(如果嵌套属性都为零)

我正在寻找与rails相当的产品

接受:地址的\u嵌套\u属性\u,如果::all\u为空则拒绝\u

这不应该返回地址的验证错误,并且仍然允许持久化未列出的参数。我希望电子邮件和名字仍然被保存,而地址被忽略

# Example attrs 
%{"addresses" => %{"0" => %{"address_type" => nil, "city" => nil, "street1" => nil, "street2" => nil}}, email: "info@gmail.com",  first_name: "dave"}


@user [:email, first_name]
def user_changeset(%User{} = user, attrs \\ %{}) do
  user
  |> cast(attrs, @user)
  |> validate_required(@user)
  |> validate_format(:email, ~r/@/)
  |> cast_assoc(:addresses, required: false, with: &addresses_from_changeset/2)
end 

@address [:city, :street1, :address_type]
defp addresses_from_changeset(model, params \\ :empty) do
  model
  |> cast(params, @address_fields)
  |> validate_required(@address_fields)
end

看起来还没有一个很好的解决方案:。一种可能的解决方法包括在将数据传递到
cast
cast\u assoc
之前,从
attrs
中手动删除此类空白条目。