Phoenix 模块未实现 Ecto Queryable
Ecto Queryable not implemented for Phoenix module
我正在学习 Programming Phoenix 1.4 教程并 运行 遇到一个问题,我被告知 Ecto Queryable
未针对给定模块实现,但我不知道为什么。在 SO 上还有一个与此类似的问题,但它有一个简单的答案,不适用于我的情况。
我的 lib/rumbl/accounts/user.ex
文件中有此代码:
defmodule Rumbl.Accounts.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :name, :string
field :username, :string
timestamps()
end
end
这是我的 lib/rumbl/accounts/accounts.ex
文件中的代码:
defmodule Rumbl.Accounts do
@moduledoc """
The Accounts context.
"""
alias Rumbl.Accounts.User
alias Rumbl.Repo
def get_user(id) do
Repo.get(User, id)
end
def get_user!(id) do
Repo.get!(User, id)
end
def get_user_by(params) do
Repo.get_by(User, params)
end
def list_users do
Repo.all(User)
end
end
但是,当我从 UserController
调用 Rumbl.Accounts.list_users
时,出现以下错误:
** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for Rumbl.Accounts.User, the given module does not provide a schema. This protocol is implemented for: Atom, BitString, Ecto.Query, Ecto.SubQuery, Tuple
当我在 mix -S iex
中 运行 相同的查询时,我没有得到相同的错误。
这可能是本书建议的代码中的一个错误,因为它处于测试阶段,但我终究无法弄清楚哪里出了问题。在另一个 SO post 中,用户忘记了别名 Rumbl.Accounts.User
,但对我来说显然不是这种情况。
如有任何帮助,我们将不胜感激!
您的代码是正确的,应该可以正常工作。通过清理构建文件并重新编译您的代码可以解决该问题:
$ mix clean
$ mix compile
我正在学习 Programming Phoenix 1.4 教程并 运行 遇到一个问题,我被告知 Ecto Queryable
未针对给定模块实现,但我不知道为什么。在 SO 上还有一个与此类似的问题,但它有一个简单的答案,不适用于我的情况。
我的 lib/rumbl/accounts/user.ex
文件中有此代码:
defmodule Rumbl.Accounts.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :name, :string
field :username, :string
timestamps()
end
end
这是我的 lib/rumbl/accounts/accounts.ex
文件中的代码:
defmodule Rumbl.Accounts do
@moduledoc """
The Accounts context.
"""
alias Rumbl.Accounts.User
alias Rumbl.Repo
def get_user(id) do
Repo.get(User, id)
end
def get_user!(id) do
Repo.get!(User, id)
end
def get_user_by(params) do
Repo.get_by(User, params)
end
def list_users do
Repo.all(User)
end
end
但是,当我从 UserController
调用 Rumbl.Accounts.list_users
时,出现以下错误:
** (Protocol.UndefinedError) protocol Ecto.Queryable not implemented for Rumbl.Accounts.User, the given module does not provide a schema. This protocol is implemented for: Atom, BitString, Ecto.Query, Ecto.SubQuery, Tuple
当我在 mix -S iex
中 运行 相同的查询时,我没有得到相同的错误。
这可能是本书建议的代码中的一个错误,因为它处于测试阶段,但我终究无法弄清楚哪里出了问题。在另一个 SO post 中,用户忘记了别名 Rumbl.Accounts.User
,但对我来说显然不是这种情况。
如有任何帮助,我们将不胜感激!
您的代码是正确的,应该可以正常工作。通过清理构建文件并重新编译您的代码可以解决该问题:
$ mix clean
$ mix compile