Ash FrameworkAF
Ash Framework3y ago
20 replies
exadra37

How can we get a record by id?

I was able to figure out that i can get one with:

Helpdesk.Support.get! Helpdesk.Support.Ticket, ticket.id


but I would like to get it with:

Helpdesk.Api.read_support_ticket ticket.id


This doesn't work:

{:error,
 %Ash.Error.Invalid{
   errors: [
     %Ash.Error.Invalid.MultipleResults{
       count: 2,
       at_least?: true,
       changeset: nil,
       query: nil,
       error_context: [],
       vars: [],
       path: [],
       stacktrace: #Stacktrace<>,
       class: :invalid
     }
   ],
   stacktraces?: true,
   changeset: nil,
   query: nil,
   error_context: [],
   vars: [],
   path: [],
   stacktrace: #Stacktrace<>,
   class: :invalid
 }}


My code:

defmodule Helpdesk.Api do

  require Ash.CodeInterface

  Ash.CodeInterface.define_interface(Helpdesk.Support, Helpdesk.Support.Ticket)
end

defmodule Helpdesk.Support.Ticket do
  
  use Ash.Resource,
    data_layer: Ash.DataLayer.Ets

  actions do
    defaults [:create, :read, :update, :destroy]

    create :open_support_ticket do
      accept [:subject]
    end

    read :read_support_ticket do
      # primary? true
      argument :id, :uuid do
        allow_nil? false
      end
      # filter [id: :id]
    end

  ## ommitted code ...

  code_interface do
    define :open_support_ticket, args: [:subject]
    define :read_support_ticket, action: :read_support_ticket, args: [:id], get?: true
    define :close_support_ticket, args: []
  end
end
Was this page helpful?