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






















