Filtering by enum attribute
I have an Ash resource that has an enum field
This does not work however, returns the following error:
Is there an example or an way to filter by an enum?
statusstatus. Im using AshJsonApi to pass in a filter: filter[status]=active,incompletefilter[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 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
endThis 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]}
)
], [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?
