2014-12-27 86 views
4

我是新來的使用Ecto和Elixir,我遇到了一個我無法解釋的錯誤。我的代碼看起來就像Ecto自述文件中的示例。修復協議Ecto.Queryable未實施錯誤

這裏是我的外生模型和查詢

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。