@@ -983,7 +983,7 @@ defmodule Ecto.Association.Has do
983983 end
984984
985985 @ doc false
986- def nilify_all ( % { related_key: [ related_key ] } = refl , parent , repo_name , opts ) do
986+ def nilify_all ( % { related_key: related_key } = refl , parent , repo_name , opts ) when is_atom ( related_key ) do
987987 if query = on_delete_query ( refl , parent ) do
988988 Ecto.Repo.Queryable . update_all repo_name , query , [ set: [ { related_key , nil } ] ] , opts
989989 end
@@ -995,18 +995,17 @@ defmodule Ecto.Association.Has do
995995 end
996996 end
997997
998- defp on_delete_query ( % { owner_key: [ owner_key ] , related_key: [ related_key ] ,
999- queryable: queryable } , parent ) do
998+ defp on_delete_query ( % { owner_key: owner_key , related_key: related_key , queryable: queryable } , parent )
999+ when is_atom ( owner_key ) and is_atom ( related_key ) do
10001000 if value = Map . get ( parent , owner_key ) do
10011001 from x in queryable , where: field ( x , ^ related_key ) == ^ value
10021002 end
10031003 end
10041004
1005- defp on_delete_query ( % { owner_key: owner_key , related_key: related_key ,
1006- queryable: queryable } , parent ) do
1007- values = Enum . map ( owner_key , & Map . get ( parent , & 1 ) )
1005+ defp on_delete_query ( % { owner_key: owner_keys , related_key: related_keys , queryable: queryable } , parent ) do
1006+ values = Enum . map ( owner_keys , & Map . get ( parent , & 1 ) )
10081007 if values != [ ] && Enum . all? ( values ) do
1009- related_key
1008+ related_keys
10101009 |> Enum . zip ( values )
10111010 |> Enum . reduce ( from ( x in queryable ) , fn { related_key_field , value } , query ->
10121011 query |> where ( [ x ] , field ( x , ^ related_key_field ) == ^ value )
0 commit comments