File tree Expand file tree Collapse file tree 2 files changed +30
-5
lines changed
Expand file tree Collapse file tree 2 files changed +30
-5
lines changed Original file line number Diff line number Diff line change @@ -1142,11 +1142,21 @@ defmodule Ecto.Repo.Schema do
11421142 defp reset_parent? ( changes , data , assoc ) do
11431143 % { field: field , owner_key: owner_key , related_key: related_key } = assoc
11441144
1145- with % { ^ owner_key => owner_value } <- changes ,
1146- % { ^ field => % { ^ related_key => related_value } } when owner_value != related_value <- data do
1147- true
1148- else
1149- _ -> false
1145+ case changes do
1146+ % { ^ owner_key => owner_value } ->
1147+ case data do
1148+ % { ^ field => % { ^ related_key => related_value } } when owner_value != related_value ->
1149+ true
1150+
1151+ % { ^ field => nil } when owner_value != nil ->
1152+ true
1153+
1154+ _ ->
1155+ false
1156+ end
1157+
1158+ _ ->
1159+ false
11501160 end
11511161 end
11521162
Original file line number Diff line number Diff line change @@ -496,4 +496,19 @@ defmodule Ecto.Repo.BelongsToTest do
496496 assert updated_schema . assoc_id == 2
497497 assert % Ecto.Association.NotLoaded { } = updated_schema . assoc
498498 end
499+
500+ @ tag :wtf
501+ test "reset assoc when foreign key update results in a mismatch and parent is nil" do
502+ schema = % MySchema { } |> TestRepo . insert! ( ) |> TestRepo . preload ( :assoc )
503+ assert schema . assoc_id == nil
504+ assert schema . assoc == nil
505+
506+ updated_schema =
507+ schema
508+ |> Ecto.Changeset . change ( % { assoc_id: 2 } )
509+ |> TestRepo . update! ( )
510+
511+ assert updated_schema . assoc_id == 2
512+ assert % Ecto.Association.NotLoaded { } = updated_schema . assoc
513+ end
499514end
You can’t perform that action at this time.
0 commit comments