协议Ecto.Queryable未实现

时间:2016-03-03 04:03:09

标签: elixir phoenix-framework ecto

我正在尝试将Guardian实现到我的API中并通过它执行登录以获取JWT。我正在看的教程是here。问题是使用类似于他们在示例中使用的用户模型实现登录。 Model代码如下所示:

defmodule PushflightServer.User do
  use PushflightServer.Web, :model

use Ecto.Repo
import Ecto.Query
  alias PushflightServer.Repo

  schema "users" do
    field :name, :string
    field :email, :string
    field :encrypted_password, :string
    field :password, :string, virtual: true
    field :verify_token, :string
    field :verify_date, Ecto.DateTime

    timestamps
  end

  def from_email(nil), do: { :error, :not_found }
  def from_email(email) do
    IO.write("Before email")
    IO.inspect(email)
    Repo.one(User, email: email)
  end

如果我在凤凰城内或直接在 iex -S mix 中调用from_email,我会收到以下错误:

user = PushflightServer.User.from_email(“rob@json.com”)

  

**(Protocol.UndefinedError)协议Ecto.Queryable没有为User实现,给定的模块不存在       (ecto)lib / ecto / queryable.ex:33:Ecto.Queryable.Atom.to_query / 1       (ecto)lib / ecto / repo / queryable.ex:90:Ecto.Repo.Queryable.execute / 5       (ecto)lib / ecto / repo / queryable.ex:15:Ecto.Repo.Queryable.all / 4       (ecto)lib / ecto / repo / queryable.ex:44:Ecto.Repo.Queryable.one/4

我必须遗漏一些简单的东西,但我找不到任何关于这种情况发生的文件。使用Repo插入数据工作正常。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您需要将function onPrompt(results) { if (results.buttonIndex === 1) { alert('sucess'); } else { alert('fail'); } } 完全命名为User,或者您可以使用快捷方式PushflightServer.User

答案 1 :(得分:2)

您应该引用具有命名空间的模块

  def from_email(email) do
    PushflightServer.one(PushflightServer.User, email: email)
  end