Elixir 如果嵌套属性为nil,则拒绝验证并强制转换关联
在phoenix变更集中是否有一种方法可以拒绝嵌套属性,而不强制转换或验证嵌套属性(如果嵌套属性都为零) 我正在寻找与rails相当的产品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
接受:地址的\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
中手动删除此类空白条目。