Does Ash.load figure out dependant fields?

I am trying to evaluate if i’m going to use Ash and saw this in one of the presentations

Order matters

Ash.load([:some_computed_field, :some_computed_field_2])
Will the following still work?
Ash.load([:some_computed_field_2, :some_computed_field])
Does Ash figure out that :some_computed_field_2 is dependant on :some_computed_field

Think it will be really valuable if Ash can figure this out on its own as it will prevent programming errors. Just doing Ash.load([:some_computed_field, :some_computed_field_2]) feels like its just syntactical improvement

Absolutely!

And if field2 depends on field1, but you don’t actually need the value of field1 - you can write Ash.load(:field2) and it will figure out that it needs to load field1 in order to load field2.

If your field are expressions, eg;

calculate :field2, :integer, expr(field1 + 2)

This dependency management will happen automatically.

If your field is in Elixir code, eg. a calculation in a separate module, then you will need to state the dependencies explicitly and then Ash will manage them for you:

calculate :field2, :integer, DoExpensiveCalculation

defmodule DoExpensiveCalculation do 
  use Ash.Resource.Calculation

  def load(_, _, _), do: [:field2]

  def calculate(records) do 
    # Some Elixir code that can rely on `field2` being loaded on all of the records
2 Likes