Fix protocol Ecto.Queryable not implemented error

烂漫一生 提交于 2019-12-10 16:33:25

问题


I'm new to using Ecto and Elixir and I've come across an error that I can't explain. My code looks just like the example in the Ecto README.

Here are my modules for the Ecto Model and 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

Here is how I call the query function

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

This all seems exactly in line with the Ecto documentation, and I can't find anything saying otherwise. But I get the following error.

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

回答1:


Your by_user/1 function is already calling Repo.all, so when you call registrations = Repo.all(...) later on, you are passing the result of the first Repo.all as argument, which is a list as you see in the error message!

To be clear, you get this error message because you can pass anything that implements the Ecto.Queryable protocol into Repo.all.



来源:https://stackoverflow.com/questions/27671867/fix-protocol-ecto-queryable-not-implemented-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!