4

私は Ecto と Elixir を使用するのが初めてで、説明できないエラーに遭遇しました。私のコードは、Ecto README の例とまったく同じように見えます。

これが Ecto Model と Query のモジュールです

defmodule Registration do
  use Ecto.Model

  schema "registrations" do
    field :user_id, :string
    field :created_at, :datetime, default: Ecto.DateTime.local
    field :updated_at, :datetime, default: Ecto.DateTime.local
  end
end

defmodule RegistrationQuery do
  import Ecto.Query

  def by_user(user_id) do
    query = from r in Registration,
          where: r.user_id == ^user_id,
         select: r
    Repo.all(query)
  end
end

クエリ関数を呼び出す方法は次のとおりです

registrations = Repo.all RegistrationQuery.by_user("underwater")

これはすべて Ecto のドキュメントと完全に一致しているように見えますが、それ以外のことを言っているものは見つかりません。しかし、次のエラーが発生します。

protocol Ecto.Queryable not implemented for [%Ensalutilo.Registration{user_id: "underwater"}]
4

1 に答える 1

6

関数by_user/1は既に を呼び出しているRepo.allため、後で呼び出すときregistrations = Repo.all(...)に、最初の結果を引数として渡しRepo.allます。これは、エラー メッセージに表示されるリストです!

明確にするために、Ecto.Queryable プロトコルを実装するものは何でも Repo.all に渡すことができるため、このエラー メッセージが表示されます。

于 2014-12-27T22:09:45.783 に答える