Setting an attribute to a calculated value based on a relation

In this case, you’d do this with a custom change.

create :create do
  primary? true
  accept [:content, :task_id]
  change relate_actor(:user)

  change fn changeset, context -> 
    Ash.Changeset.before_action(changeset, fn changeset -> 
      actor = context.actor
      task = Ash.Changeset.get_attribute(changeset, :task_id)
      workgroup_id = # look up the workgroup id
      Ash.Changeset.force_change_attribute(changeset, :workgroup_id, workgroup_id)
    end
  end
end

A small note, I’ve shown the inline anonymous function syntax here for brevity, but the best practice is to define a module to contain this logic.

change YourChange

defmodule YourChange do
  use Ash.Resource.Change

  def change(changeset, _opts, context) do
      actor = context.actor
      task = Ash.Changeset.get_attribute(changeset, :task_id)
      workgroup_id = # look up the workgroup id
      Ash.Changeset.force_change_attribute(changeset, :workgroup_id, workgroup_id)
  end
end