Absinthe dataloader: нет соответствия предложения функции в анонимном fn / 3 в Absinthe.Resolution.Helpers.dataloader / 2

Интеграция Absinthe и Dataloader для меня совершенно нова, поэтому любая помощь приветствуется.

У меня следующая ошибка:

** (FunctionClauseError) no function clause matching in anonymous fn/3 in Absinthe.Resolution.Helpers.dataloader/2

My PostType:

defmodule MyApp.Schema.Types.PostType do
  use Absinthe.Schema.Notation
  import Absinthe.Resolution.Helpers, only: [dataloader: 1]

  object :post_type do
    field(:id, :id)
    field(:title, :string)
    field(:body, :string)
    field(:published, :boolean)
    field :user, :user_type, resolve: dataloader(:user)
  end

  input_object :post_input_type do
    field(:title, non_null(:string))
    field(:body, non_null(:string))
    field(:published, non_null(:boolean))
  end
end

Схема мутации:

@desc "Create a post"
    field :create_post, type: :post_type do
      arg(:input, non_null(:post_input_type))
      middleware(Authorize, :any)
      resolve(&Resolvers.PostResolver.create_post/3)
    end

Резольвер:

def create_post(_, %{input: input}, %{context: %{current_user: current_user}}) do
    Map.merge(input, %{user_id: current_user.id})
    |> Blog.create_post()
  end

person Kevin Etore    schedule 05.07.2020    source источник


Ответы (1)


Первым аргументом помощника dataloader должен быть модуль, а не атом.

Для иллюстрации я предполагаю, что ваш User модуль определен в MyApp.Accounts.User и что у вас есть файл с именем accounts.ex.

Внутри accounts.ex у вас должно быть следующее:

  def data() do
    Dataloader.Ecto.new(Repo)
  end

Затем измените поле пользователя в своем типе сообщения, чтобы использовать это:

field :user, :user_type, resolve: dataloader(User)

Я могу еще помочь, если он все еще не работает. В настоящее время я пытаюсь создать приложение с использованием абсента, чтобы он свежо у меня в голове.

person Peaceful James    schedule 15.07.2020
comment
Спасибо за ваш ответ. В настоящее время я получаю `** (FunctionClauseError) отсутствие соответствия предложения функции в анонимном fn / 3 в Absinthe.Resolution.Helpers.dataloader / 2`. Не могли бы вы немного рассказать об использовании функции данных в Accounts.ex? - person Kevin Etore; 18.07.2020