Ash FrameworkAF
Ash Framework3y ago
11 replies
gordoneliel

Filtering by enum attribute

I have an Ash resource that has an enum field status. Im using AshJsonApi to pass in a filter: filter[status]=active,incomplete. This doesnt seem to work out of the box so I implemented a preperation where I do this:
  defp filter_by_status(query) do
    case Ash.Changeset.get_argument(query, :filter) do
      %{"status" => statuses} ->
        all_statuses = String.split(statuses, ",")
        Ash.Query.filter(query, status in ^all_statuses)

      _ ->
        query
    end
  end


This does not work however, returns the following error:
[error] FrameworkError: Framework Error | something went wrong. Error messaging is incomplete so far: %Ash.Error.Query.InvalidFilterValue{message: nil, value: "active,incomplete", context: #Ecto.Query<from m0 in MembershipService.Memberships.Membership, as: 0, where: type(as(0).status, {:parameterized, Ash.Type.Atom.EctoType, []}) ==
  type(
    ^"active,incomplete",
    {:parameterized, Ash.Type.Atom.EctoType,
     one_of: [:active, :canceled, :incomplete, :incomplete_expired, :trialing, :past_due, :unpaid]}
  ), where: type(as(0).status, {:parameterized, Ash.Type.Atom.EctoType, []}) in [
  type(
    ^"active",
    {:parameterized, Ash.Type.Atom.EctoType,
     one_of: [:active, :canceled, :incomplete, :incomplete_expired, :trialing, :past_due, :unpaid]}
  ),
  type(
    ^"incomplete",
    {:parameterized, Ash.Type.Atom.EctoType,
     one_of: [:active, :canceled, :incomplete, :incomplete_expired, :trialing, :past_due, :unpaid]}
  )
], 


Is there an example or an way to filter by an enum?
Was this page helpful?