2017-10-08 5 views
1

私は、Absintheを使用してクエリ内のネストされた項目に引数を使用する方法を調べようとしています。Absinthe in Elixirを使用しているクエリでネストされた項目の引数を使用するにはどうすればよいですか?

私は何を達成しようとすると、このされています。ここに私のスキーマおよびタイプだ

{ 
    users(order: ASC) { 
    id 
    email 
    clients(order: DESC) { 
     id 
     email 
    } 
    } 
} 

query do 
    @desc "Get all users" 
    field :users, list_of(:user) do 
     arg :order, type: :sort_order, default_value: :asc 
     resolve &Resolvers.users/2 
    end 
    end 

    @desc "A user" 
    object :user do 
    field :id, :id 
    field :email, :string 
    field :clients, list_of(:user) 
    end 

とレゾルバ:

def users(_, args, _) do 
    args 
    |> Enum.reduce(User, fn 
     {:order, order}, query -> 
     query |> order_by({^order, :email}) 
    end) 
    |> Repo.all |> Repo.preload([:clients]) 
    end 

だから私の質問は、どのように、どこでクライアントの並べ替えの引数を配置する必要がありますか?上記の例では 私はエラーを取得する:

"message": "Unknown argument \"order\" on field \"clients\" of type \"User\"." 
+0

この[Q &A](https://stackoverflow.com/questions/34155439/getting-error-unknown-argument-id-on-field-user-of-type-query-graphql?rq=1)あなたを助けるものがあるかもしれません。 –

答えて

1

clientsフィールドの下の引数を置く:

object :user do 
    field :id, :id 
    field :email, :string 
    field :clients, list_of(:user) do 
    arg :order, type: :sort_order, default_value: :asc 
    resolve &Resolvers.clients/2 
    end 
end 

を次にソートを処理するためのリゾルバを書く:

def clients(user, %{order: clients_order}, _) do 
    sorted_clients = user.clients # TODO sort those clients into the desired order 
    {:ok, sorted_clients} 
end 
関連する問題