Accessing relationship fields inside Ash.query.filter

I have this:
defp user_query(context) do
User
|> Ash.Query.select([:first_name, :last_name])
|> Ash.Query.load([dashboard_students: [:educator, :dashboard_student_groups]])
|> maybe_filter_by_graduation_year(context)
|> maybe_filter_by_dashboard_group(context)
end

defp maybe_filter_by_graduation_year(query, %{arguments: %{graduation_year: nil}}) do
query
end

defp maybe_filter_by_graduation_year(query, %{arguments: %{graduation_year: graduation_year}}) do
Ash.Query.filter(query, graduation_year == ^graduation_year or undergraduate_graduation_year == ^graduation_year)
end

defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: nil}}) do
query
end

defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: dashboard_group_id}}) do
Ash.Query.filter(query, dashboard_student_groups.id == ^dashboard_group_id)
end
defp user_query(context) do
User
|> Ash.Query.select([:first_name, :last_name])
|> Ash.Query.load([dashboard_students: [:educator, :dashboard_student_groups]])
|> maybe_filter_by_graduation_year(context)
|> maybe_filter_by_dashboard_group(context)
end

defp maybe_filter_by_graduation_year(query, %{arguments: %{graduation_year: nil}}) do
query
end

defp maybe_filter_by_graduation_year(query, %{arguments: %{graduation_year: graduation_year}}) do
Ash.Query.filter(query, graduation_year == ^graduation_year or undergraduate_graduation_year == ^graduation_year)
end

defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: nil}}) do
query
end

defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: dashboard_group_id}}) do
Ash.Query.filter(query, dashboard_student_groups.id == ^dashboard_group_id)
end
The maybe_filter_by_graduation_year works, but maybe_filter_by_dashboard_group gives this error:
** (Ash.Error.Unknown)
Bread Crumbs:
> Error returned from: MyApp.Ash.Organizations.Organization.read

Unknown Error

* Invalid reference dashboard_student_groups.id
at users, filter
** (Ash.Error.Unknown)
Bread Crumbs:
> Error returned from: MyApp.Ash.Organizations.Organization.read

Unknown Error

* Invalid reference dashboard_student_groups.id
at users, filter
1 Reply
barnabasj
barnabasj4mo ago
Are you maybe looking for this?
defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: dashboard_group_id}}) do
Ash.Query.filter(query, exists(dashboard_studends.dashboard_student_groups, id == ^dashboard_group_id))
end
defp maybe_filter_by_dashboard_group(query, %{arguments: %{dashboard_group_id: dashboard_group_id}}) do
Ash.Query.filter(query, exists(dashboard_studends.dashboard_student_groups, id == ^dashboard_group_id))
end
if not, what do your relationship definitions look like?

Did you find this page helpful?