@@ -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