Skip to content

Commit e74f9ee

Browse files
committed
Adjust behavoiur of changed?/2 for assocs
It now returns true whenever `fetch_change? != :error`. Previously, it returned false when assoc was set to existing struct (as `changeset.changes == %{}`) and errored when set to nil (due to `nil.changes != %{}` check in `relation_changed?`. Fixes #4543.
1 parent 1eaf462 commit e74f9ee

File tree

1 file changed

+2
-10
lines changed

1 file changed

+2
-10
lines changed

lib/ecto/changeset.ex

+2-10
Original file line numberDiff line numberDiff line change
@@ -538,12 +538,12 @@ defmodule Ecto.Changeset do
538538
case fetch_change(changeset, field) do
539539
{:ok, new_value} ->
540540
case type do
541-
{tag, relation} when tag in @relations ->
541+
{tag, _relation} when tag in @relations ->
542542
if opts != [] do
543543
raise ArgumentError, "invalid options for #{tag} field"
544544
end
545545

546-
relation_changed?(relation.cardinality, new_value)
546+
true
547547

548548
_ ->
549549
Enum.all?(opts, fn
@@ -567,14 +567,6 @@ defmodule Ecto.Changeset do
567567
end
568568
end
569569

570-
defp relation_changed?(:one, changeset) do
571-
changeset.action != :update or changeset.changes != %{}
572-
end
573-
574-
defp relation_changed?(:many, changesets) do
575-
Enum.any?(changesets, &relation_changed?(:one, &1))
576-
end
577-
578570
@doc """
579571
Returns the default empty values used by `Ecto.Changeset`.
580572

0 commit comments

Comments
 (0)