Skip to content

Commit 682c07d

Browse files
committed
Assume owner and related are present
1 parent aed4621 commit 682c07d

1 file changed

Lines changed: 6 additions & 27 deletions

File tree

lib/ecto/changeset/relation.ex

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ defmodule Ecto.Changeset.Relation do
1010
required(:cardinality) => :one | :many,
1111
required(:on_replace) => :raise | :mark_as_invalid | atom,
1212
required(:field) => atom,
13+
required(:owner) => atom,
14+
required(:related) => atom,
1315
optional(:unique) => boolean,
1416
optional(:ordered) => boolean,
15-
optional(:owner) => atom,
16-
optional(:related) => atom,
1717
optional(atom()) => any()
1818
}
1919

@@ -254,21 +254,16 @@ defmodule Ecto.Changeset.Relation do
254254
raise ArgumentError, "expected changeset data to be a #{mod} struct, got: #{inspect(data)}"
255255
end
256256

257-
defp assert_changeset_struct!(changeset, _relation) do
258-
# For relations without a related module, any data type is accepted
259-
changeset
260-
end
261-
262257
@doc """
263258
Handles the changeset or struct when being replaced.
264259
"""
265260
def on_replace(%{on_replace: :mark_as_invalid}, _changeset_or_struct) do
266261
:error
267262
end
268263

269-
def on_replace(%{on_replace: :raise, field: name} = relation, _) do
264+
def on_replace(%{on_replace: :raise, field: name, owner: owner}, _) do
270265
raise """
271-
you are attempting to change relation #{pretty_relation(relation)}
266+
you are attempting to change relation #{inspect(name)} of #{inspect(owner)}
272267
but the `:on_replace` option of this relation is set to `:raise`.
273268
274269
By default it is not possible to replace or delete embeds and
@@ -298,9 +293,9 @@ defmodule Ecto.Changeset.Relation do
298293
{:ok, Changeset.change(changeset_or_struct) |> put_new_action(:replace)}
299294
end
300295

301-
defp raise_if_updating_with_struct!(%{field: name} = relation, %{__struct__: _} = new) do
296+
defp raise_if_updating_with_struct!(%{field: name, owner: owner}, %{__struct__: _} = new) do
302297
raise """
303-
you have set that the relation #{pretty_relation(relation)}
298+
you have set that the relation #{inspect(name)} of #{inspect(owner)}
304299
has `:on_replace` set to `:update` but you are giving it a struct/
305300
changeset to put_assoc/put_change.
306301
@@ -321,9 +316,6 @@ defmodule Ecto.Changeset.Relation do
321316
true
322317
end
323318

324-
defp pretty_relation(%{field: name, owner: owner}), do: "#{inspect(name)} of #{inspect(owner)}"
325-
defp pretty_relation(%{field: name}), do: inspect(name)
326-
327319
defp cast_or_change(
328320
%{cardinality: :one} = relation,
329321
value,
@@ -482,7 +474,6 @@ defmodule Ecto.Changeset.Relation do
482474
# helpers
483475

484476
defp primary_keys(%{related: mod}), do: mod.__schema__(:primary_key)
485-
defp primary_keys(_relation), do: []
486477

487478
defp on_cast_default(%{related: module}) do
488479
fn struct, params ->
@@ -513,14 +504,6 @@ defmodule Ecto.Changeset.Relation do
513504
end
514505
end
515506

516-
defp on_cast_default(%{field: field}) do
517-
raise ArgumentError, """
518-
the relation `#{field}` does not have a schema module and requires an explicit :with option.
519-
520-
Please pass a changeset function of arity 2 (or arity 3 for cardinality :many) using the :with option.
521-
"""
522-
end
523-
524507
defp check_action!(changeset, allowed_actions) do
525508
action = changeset.action
526509

@@ -604,10 +587,6 @@ defmodule Ecto.Changeset.Relation do
604587
end
605588
end
606589

607-
defp param_pk(_relation, []) do
608-
fn _params -> [] end
609-
end
610-
611590
defp change_pk(pks) do
612591
fn %Changeset{} = cs ->
613592
Enum.map(pks, fn pk ->

0 commit comments

Comments
 (0)