2014-12-27 5 views
4

Я новичок в использовании Ecto и Elixir, и я столкнулся с ошибкой, которую я не могу объяснить. Мой код выглядит так же, как в примере в Ecto README.Fix protocol Ecto.Queryable не реализована ошибка

Вот мои модули для модели экто- и 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") 

все это кажется точно в соответствии с документацией эктопаразитов, и я могу найти что-либо иначе. Но я получаю следующую ошибку.

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

ответ

6

Вашей by_user/1 функции уже называют Repo.all, поэтому, когда вы звоните registrations = Repo.all(...) позже, вы передаете результат первого Repo.all в качестве аргумента, который представляет собой список, как вы видите, в сообщении об ошибке!

Чтобы быть ясным, вы получите это сообщение об ошибке, потому что вы можете передать все, что реализует протокол Ecto.Queryable в Repo.all.