Does manage_relationship document incorrectly ask to specify the relationship before inputs?

The manage_relationship[1] documentation[2] says that relationship has to be specified before inputs:

manage_relationship(changeset, relationship, input, opts \\ [])

However doing so, throws an error.
Also, the example [3] in alembic’s realworld repo, calls the function in this way:

 change manage_relationship(:target_id, :target, type: :append)
 ...
 relationships do
   ...
    belongs_to :target, Realworld.Accounts.User do
      api Realworld.Accounts
      allow_nil? false
      primary_key? true
    end
  end

Why is :target specified after :target_id? Isn’t :target the relationship?


[1] ash/lib/ash/changeset/changeset.ex at v2.21.13 · ash-project/ash · GitHub
[2] Ash.Changeset — ash v2.21.13
[3] realworld/lib/realworld/profiles/resources/follow.ex at 5ddc03e7bc9accfa30327e823450357e56e6c56d · team-alembic/realworld · GitHub

You’re looking at two different manage_relationship functions.

The one in the realworld app is a change function, defined here → ash/lib/ash/resource/change/builtins.ex at v2.21.13 · ash-project/ash · GitHub

This calls Ash.Changeset.manage_relationship/4 under the hood, but with the arguments rearranged.

1 Like